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 :

Demande d'aide pour requete sql


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut Demande d'aide pour requete sql
    Bonjour, Je suis débutant en .net et surtout en sql.
    Dans une table je voudrais rechercher les lignes saisies dans la 7 ème heure.
    j'ai essayé avec cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP (12) Operation_ID, Operation, Reference, Poids, Débit, Conformite, DateCreation, Plancontrole
    FROM TABLE_OPERATION 
    WHERE (DateCreation LIKE '%07%') 
    ORDER BY Operation_ID DESC
    Cette requete me donne les lignes ou DateCreation contient un 07, j'ai essayé d'ajouté les deux points
    (DateCreation LIKE '%07:__:%')
    mais ça ne fonctionne pas, il ne cherche pas les deux points ??
    DateCreation est au format "dd/mm/yyyy hh:mm:ss"
    Si vous pouvez m'aider, merci beaucoup.

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Une date est une date, et n'a pas de format.

    C'est sa représentation sous forme de chaîne de caractères qui a un format.
    Et c'est contre-performant de travailler dessus.

    Il faut donc privilégier l'utilisation de la fonction datepart() qui permet d'extraire une partie d'une date, sous forme d'un entier.

    Il suffira donc de faire datepart(hour, madate) = 7

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Effectivement les dates ne sont pas des chaînes de caractères.
    Donc l'utilisation du prédicat LIKE est ici incorrecte.

    Vous pouvez utiliser la fonction DATEPART() comme vous l'a indiqué StringBuilder, mais cette requête ne pourra pas alors profiter d'un index sur la colonne DateCreation.
    Si vous ne cherchez que les lignes d'une journée pour lesquelles l'heure est 7, il vaut mieux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT	TOP (12) Operation_ID, Operation, Reference, Poids, Débit, Conformite, DateCreation, Plancontrole
    FROM	dbo.TABLE_OPERATION 
    WHERE	DateCreation >= '20120829 07:00:00'
    AND	DateCreation < '20120829 0/:00:00'
    ORDER	BY Operation_ID DESC
    @++

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    C'est quoi le slash dans la seconde date (???)

    --- Hmmm... J'ai l'impression que le / étant au dessus du 8 sur le pavé numérique, c'est juste un 8 raté

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    Bonjour à tous, et merci pour vos réponses.
    Suite à vos commentaires j'ai modifier ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  (DATEPART(hour, DateCreation) >= '7') AND (DATEPART(hour, DateCreation) < '8')
    Ca l'air de fonctionner et ca me permet de récupérer les lignes correspondantes sur les derniers jours.
    Par contre, elsuket, peut tu mieux m'expliquer quand tu dit
    pourra pas profiter d'un index sur la colonne DateCreation
    .

  6. #6
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    la requête que Elsuket est Sargeable, donc plus optimisée (si tu poses les bons index) que tes DATEPART
    as-tu testé la requête de Elsuket ? c-a-d la requête ci-après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT	TOP (12) Operation_ID, Operation, Reference, Poids, Débit, Conformite, DateCreation, Plancontrole
    FROM	dbo.TABLE_OPERATION 
    WHERE	DateCreation >= '20120829 07:00:00'
    AND	DateCreation < '20120829 08:00:00'
    ORDER	BY Operation_ID DESC
    Pour en savoir plus sur la SARGeabilité lire ce billet
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par miikado Voir le message
    Par contre, elsuket, peut tu mieux m'expliquer quand tu dit
    .
    Pour se demander si on peut utiliser un index, le mieux est de comparer avec un dictionnaire.
    Si je dois chercher tous les mots compris entre 'inde' et 'indf' parce que je cherche un mot commençant par 'ind' (ici, l'équivalent du jour) et dont la 4ème lettre est un e, je peux utiliser mon dictionnaire en mode index facilement.
    Maintenant si je dois chercher tous les mots dont la 4ème lettre est un e ... Je vais être obligé de lire toute la liste des mots si je n'ai pour seul index que celui de l'ordre alphabétique (il me reste la possibilité de créer un index sur la 4ème lettre des mots).

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

Discussions similaires

  1. aide pour requete sql
    Par samplaid dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/07/2007, 12h18
  2. Besoin aide pour Requete SQL
    Par mystik11 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/07/2006, 11h34
  3. [OGS ?] Demande d'aide pour requete SQL
    Par hamtary dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/03/2006, 12h58
  4. Aide Pour Requete SQL Simple ... Merci d'avance :)
    Par thefutureisnow dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/12/2005, 11h39

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