IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Rechercher une date


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut Rechercher une date
    Bonsoir à tous,

    j'ai trouvé cette procédure stockée :
    SP_SEARCH_STRING_ANYFIELD_ANYTABLE dans :
    http://sqlpro.developpez.com/cours/s...r/transactsql/


    permettant de rechercher une valeur dans toute la BDD.

    j'essai de l'adapter pour rechercher une date (la donnée est de type datetime) mais je n'y arrive pas.

    je sous sou sql serveur 2008

    pouvez-vous m'aider ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Qu'est-ce que tu as fait ?
    Où rencontres-tu de la difficulté ?

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    A partir de la procédure initiale créée par SQLPro (Merci SQLPro), qui marche très bien pour les colonnes de type char, varchar, nchar, nvarchar, j’ai apporté une très légère modification, voir ci-dessous, afin de prendre en compte le type datetime, dont l’argument de recherche doit être exprimé au format jj/mm/aaaa (sans précision ni des heures ni des minutes, secondes etc) et répondre ainsi à ta question.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    CREATE PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE
                     @SearchWord Varchar(32)      -- mot recherché
    AS 
     
    DECLARE @ErrMsg VARCHAR(128)
     
    -- effet de bord 1 : pas de mot passé
    IF @SearchWord IS NULL
    BEGIN
       SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument NULL'
       GOTO LBL_ERROR 
    END
     
    -- effet de bord 2 : mot vide passé
    IF @SearchWord = ''
    BEGIN
       SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument vide'
       GOTO LBL_ERROR 
    END
     
    -- effet de bord 3 : mot contenant un caractère joker % du LIKE
    IF CHARINDEX('%', @SearchWord) > 0
    BEGIN
       SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère %'
       GOTO LBL_ERROR 
    END
     
    -- effet de bord 4 : mot contenant un caractère joker _ du LIKE
    IF CHARINDEX('_', @SearchWord) > 0
    BEGIN
       SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère _'
       GOTO LBL_ERROR 
    END
     
    -- variables de travail
    DECLARE @TableName   VARCHAR(128), -- nom de la table passé en argument
            @ColumnList1 VARCHAR(2000),-- liste des colonnes pour clause SELECT
            @ColumnList2 VARCHAR(2000),-- liste des colonnes pour clause WHERE
            @SQL         VARCHAR(5000) -- requête dynamique 
     
    -- curseur parcourant toutes les tables
    DECLARE CurTables CURSOR
    FOR 
       SELECT DISTINCT TABLE_NAME
       FROM   INFORMATION_SCHEMA.tables
       WHERE  TABLE_TYPE = 'BASE TABLE'
         AND  TABLE_NAME IS NOT NULL
    -- en cas d'erreur
    IF @@Error <> 0
    BEGIN
       SET  @ErrMsg = 'Erreur dans la recherche de la lsite des tables concernées'
       GOTO LBL_ERROR 
    END
     
    -- ouverture du cuseur
    OPEN CurTables
     
    -- lecture de la première ligne de l'ensemble de résultat
    FETCH CurTables INTO @TableName
     
    -- la lecture est-elle correcte ? Oui, on boucle !
    WHILE @@Fetch_Status = 0
    BEGIN
     
    -- les variables contenant les listes des colonnes sont initialisée à vide
       SET @ColumnList1 = ''
       SET @ColumnList2 = ''
     
    -- construction des listes
       SELECT @ColumnList1 = @ColumnList1 + COLUMN_NAME+', ',
              @ColumnList2 = @ColumnList2 + 'COALESCE('+COLUMN_NAME+', '''') + '
       FROM   INFORMATION_SCHEMA.COLUMNS
       WHERE  TABLE_NAME = @tableName
         AND  DATA_TYPE LIKE '%char%'
     
       -- HM 31/05/2012 : Nouveau bloc T-SQL ajouté Début...     
       SELECT @ColumnList1 = @ColumnList1 + COLUMN_NAME+', ',
              @ColumnList2 = @ColumnList2 + 'COALESCE(CONVERT(VARCHAR,'+ COLUMN_NAME+', 103), '''')+'
       FROM   INFORMATION_SCHEMA.COLUMNS
       WHERE  TABLE_NAME = @tableName
         AND  DATA_TYPE = 'DATETIME'
       -- HM 31/05/2012 : Nouveau bloc T-SQL ajouté ...Fin           
     
    -- pas de colonnes cible pour la recherche, on lit l'enregistrement suivant et on boucle
       IF @ColumnList1 = ''
       BEGIN
          FETCH CurTables INTO @TableName
          CONTINUE
       END
     
    -- suppression du dernier caractère parasite des listes de colonne 
       SET @ColumnList1 = SUBSTRING(@ColumnList1, 1, LEN(@ColumnList1) - 1)
       SET @ColumnList2 = SUBSTRING(@ColumnList2, 1, LEN(@ColumnList2) - 1)
     
    -- création de la requête de recherche de l'ensemble des occurences
       -- SET @SQL = 'SELECT ' +@ColumnList1   -- HM 31/05/2012 : Ligne mise en commentaire 
       SET @SQL = 'SELECT ' +''''+@TableName + ''' AS TABLE_NAME,'+@ColumnList1  -- HM 31/05/2012 ligne de remplacement 
                +' FROM '   +@TableName
                +' WHERE '  +@ColumnList2
                +' LIKE ''%'+@SearchWord+'%'''
     
    -- exécution de la requête de recherche des occurences      
       EXEC(@SQL)
     
    -- lecture de la ligne suivante
       FETCH CurTables INTO @TableName
    END
     
    -- fermeture du curseur
    CLOSE CurTables
     
    -- libération de l'espace mémoire
    DEALLOCATE CurTables
     
    PRINT '*** RECHERCHE de l''occurence '+@SearchWord+ ' dans toute la base terminée ***'
     
    RETURN
    -- gestion des erreurs
    LBL_ERROR:
    RAISERROR (@ErrMsg, 16, 1)
    Exemple d’utilisation :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC dbo.SP_SEARCH_STRING_ANYFIELD_ANYTABLE '23/01/2012'
    Résultat :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TABLE_NAME Nom  Prenom	  Categorie	DateCreation
    Client	  Sartre Jean-Paul   écrivain 	2012-01-23 00:00:00.000
    A+

  4. #4
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    Bonsoir,

    merci pour cette hmira c'est exactement ce que je cherche.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Rechercher une date.
    Par fasedan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/01/2012, 13h08
  2. Inputbox rechercher une date
    Par Olivierporcinet dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2011, 18h16
  3. rechercher une date et copier la ligne dans un autre onglet
    Par ptitloup57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/02/2009, 13h34
  4. [MySQL] comment rechercher une date au format datetime avec une date au format date
    Par Menoly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2007, 10h14
  5. Rechercher une date et afficher dans un formulaire
    Par gadjou dans le forum Access
    Réponses: 3
    Dernier message: 03/08/2006, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo