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

Langage SQL Discussion :

LIKE '%%' avec datetime


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Points : 37
    Points
    37
    Par défaut LIKE '%%' avec datetime
    Bonjour,
    j'essaye d'écrire une requête SQL qui retourne les enregistrements dont les dates ressemblent à une chaine que je fournis dans la clause WHERE avec LIKE.
    J'utilise SQLServer express édition, les données sont enregistrées sous ce format en type Datetime:
    JJ/MM/AAAA ????

    par ex quand je mets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE date_critère LIKE '%1998%'
    ça fonctionne et je peux récupérer les enregistrements de l'année 98.

    par contre quand j'essaye d'interroger en fonction du mois et de l'année ça ne marche pas, la requête que j'ai mis est celle là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table WHERE date_critère LIKE '%08/1998%'
    J'essaye de récupérer les enregistrements de aout 1998, mais ça retourne null.
    Auriez vous une idée là dessus, j'avoue que je suis bloqué. Merci pour votre intérêt et vos réponses, nombreuses )).

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    Je vous suggère de faire une conversion de la date dans un format texte :

    http://www.sql-server-helper.com/tips/date-formats.aspx

    Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT    * 
    FROM      Table 
    WHERE     CONVERT(VARCHAR(7), date_critère, 111) AS [YYYY/MM]  = '1998/08'

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    et pourquoi ne pas utiliser les fonctions sur les dates qui te retourne le mois et l'année?
    cela risque d'être plus optimisé que d'utiliser un like sur un champ date

  4. #4
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 789
    Points : 3 055
    Points
    3 055
    Par défaut
    La meilleure manière de travailler avec une condition sur une date est de spécifier ... une date comme critère.

    Ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE WHERE date_critère LIKE '%1998%'
    devient donc cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE WHERE date_critère Betwenn '19980101' AND '19981231'
    Partant de là, il suffit de modifier l'intervalle en fonction du besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE WHERE date_critère Betwenn '19980801' AND '19980831'
    pour obtenir le mois d'Août.


    Oui, c'est un tantinet plus compliqué vu que tu dois gérer deux variables mais c'est redoutablement efficace sur le plan de l'optimisation.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Sauf que vous n'appliquez pas votre conseil car vous comparez une date à deux chaînes de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM TABLE
    WHERE date_critère between cast('19980801' as datetime)
                           AND cast('19980831' as datetime)

  6. #6
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 789
    Points : 3 055
    Points
    3 055
    Par défaut
    Ouch! Je vais devoir l'une ou l'autre stored procedure que j'ai écrite. J'ai toujours pensé (sans creuser l'idée; j'avoue) que SQL Server allait gentillement faire une conversion implicite avant d'exécuter mon SQL.

    Oui, j'ai honte

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Non rassurez-vous, SQL Server le fait bien. Mais comme vous le dites, c'est implicite et donc c'est le mal.

Discussions similaires

  1. clause LIKE avec 1 champ SQL
    Par tamishrim dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/05/2006, 18h30
  2. Réponses: 9
    Dernier message: 21/04/2006, 16h24
  3. [tuning] like avec variable
    Par batin dans le forum Oracle
    Réponses: 21
    Dernier message: 21/03/2006, 16h12
  4. requette select like avec un caractere de moins
    Par firejocker dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/10/2005, 09h01
  5. utilisation de "LIKE" avec un type datetime dans r
    Par ericmart dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2003, 14h58

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