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 :

Filtre LIKE sur les datetime [2008R2]


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Filtre LIKE sur les datetime
    Bonjour,

    Je code une fonction d'affichage de données (php,javascript) qui reçoit une requête de la forme suivante:
    SELECT TOP 150 ici les champs sont construits en lisant un tableau (c'est une variable de la fonction) FROM (ici le nom de la base et le nom de la table est une variable de la fonction) WHERE 1=1 filtres, conditions de tri.
    Filtres est le tableau des ordres de tri que peut choisir l'utilisateur de même pour les conditions de tri.

    Sachant que je ne connais pas le type des data que va afficher mon tableau, je recherche la syntaxe qui me permettra d'émettre des conditions comme:
    LIKE '10-2013%'
    ou
    LIKE '10-10%'
    pour ne pas rater un datetime.

    En fait que dois-je écrire si je veux faire un LIKE sur une data de type datetime.

    Merci par avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    idéalement, il faudrait éviter un LIKE sur les datetime et préférer un BETWEEN.

    Si vous n'avez pas le choix (si l'utilisateur doit pouvoir saisir n'importe quelle partie de la date par exemple), alors il faudra convertir votre date en varchar à l'aide de CONVERT en choisissant le format de sortie qui convient à votre masque de saisie avec de faire un LIKE sur le VARCHAR

  3. #3
    Membre habitué
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Difficulte avec CONVERT
    Bonjour,

    En premier lieu merci pour votre réponse. Je me suis orienté vers votre suggestion. Je ne peux pas utiliser BETWEEN, l'utilisateur à le droit de faire une recherche sur le jour, le mois, l'année ou sur plusieurs items comme mois-année...
    En MySql mes filtres fonctionnent correctement. Pour SqlServeur que je connais fort peu, c'est une autre histoire.
    J'arrive à générer selon le type de variable à trier une syntaxe comme suit:
    Select champ0,champ1,uneDate,uneDateTime FROM maTable WHERE champ0 condition value ... AND CONVERT(VARCHAR, uneDateTime, 120) LIKE '%-10-2013%'
    La chaîne "-10-2013" est saisie par l'utilisateur.

    Le problème, même avec cette syntaxe mon "resulSet" reste vide et il y a bien cette valeur dans le champ uneDateTime puisque je l'affiche avant d'effectuer des tris sur le jeux de données.
    Je pense qu'il y a une erreur dans ma requête et, me connaissant, elle doit être visible par tout le monde sauf moi. Bref, une grosse coquille !

    Existe t-il un tutoriel concernant la syntaxe sql pour sqlserveur ?

    Merci par avance.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Forcément, le style que vous spécifiez dans le CONVERT ne concorde pas avec la chaine que vous donnez : le style 120 converti la date en une chaine au format aaaa-mm-jj hh:mi:ss
    donc,
    - changez le style : 105 semble convenir, mais vérifiez sur la page d'aide de convert
    ou :
    - changez le format de votre saisie utilisateur.

    vous pouvez aussi découper en plusieurs filtres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WHERE 
        YEAR(LaColonneDateTime) = 2013
        AND MONTH(LaColonneDateTime) = 10

  5. #5
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Je ne peux pas utiliser BETWEEN, l'utilisateur à le droit de faire une recherche sur le jour, le mois, l'année ou sur plusieurs items comme mois-année...
    Personnellement dans ce cas je réfléchirais à avoir une table de calendrier avec les colonnes date, mois et année avec les indexes adéquates.
    Cela vous permettra d'éviter l'utilisation des fonctions de conversion et autres subtilités pour un résultat beaucoup plus performant car prédicats sargables.

    ++

  6. #6
    Membre habitué
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Resolution du problème
    Bonjour et merci à vous tous,

    J'ai opté pour une fonction qui renverse la saisie. Pour -08-2013 elle me retourne 2013-08 etc... Pour les dates, je crois être obligé de faire ainsi. Ma fonction reçoit une requête SQL pour MySql ou SQL serveur et je ne sais jamais quelle type de champ elle va traiter.

    Vos différents avis me seront utiles et dès que j'aurais le temps je testerai vos solutions.

    Merci encore.

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

Discussions similaires

  1. [XL-MAC 2011] Probleme application du filtre avancé sur les dates en format texte
    Par go4music dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/06/2013, 00h10
  2. Clause LIKE sur les sauts de ligne
    Par sat83 dans le forum SQL
    Réponses: 3
    Dernier message: 06/07/2011, 09h44
  3. Recupération d'information sur les filtres
    Par Alpha31 dans le forum Access
    Réponses: 2
    Dernier message: 16/06/2006, 22h35
  4. Filtre sur les tcxGrid
    Par Tardiff Jean-François dans le forum Delphi
    Réponses: 3
    Dernier message: 23/05/2006, 14h10
  5. Filtre sur les données des 3 derniers mois?
    Par Arkalys dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 09h02

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