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 :

Requête avec date [2008R2]


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Requête avec date
    Bonjour,

    Je souhaite faire une requête sql, en utilisant une date en paramètre.
    Dans une table j'ai une colonne date, je souhaite affiché les résultat de ma requête en fonction du mois de et l'année sans prendre en compte le jour. Je ne sais pas couper la date pour le paramètre de ma requête.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Je ne suis pas sur d'avoir saisi ta question mais je dirais que tu peux te servir de la fonction DATEPART.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select GETDATE(), DATEPART(MONTH, GETDATE()), DATEPART(YEAR, GETDATE())
    http://msdn.microsoft.com/fr-fr/library/ms174420.aspx
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  3. #3
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Afin de profiter au mieux des index, il faut éviter les calculs sur les colonnes de la table dans votre filtre.

    Si vous cherchez les lignes qui sont du même mois (et même année) qu'une date de référence, il vaut mieux chercher les ligne dont la date est entre le debut du mois, et le debut du mois suivant la date de référence :

    Code : 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
     
    SELECT ...
    FROM LaTable
    WHERE LaColonneDate >=     
        DATEADD(
            MONTH,
            DATEDIFF(
                MONTH,
                0,
                @UneDate
            ),
            0
        )
    AND LaColonneDate <
        DATEADD(
            MONTH,
            DATEDIFF(
                MONTH,
                0,
                @UneDate
            ) + 1,
            0
        )

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut
    Ou aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    FROM LaTable
    WHERE LaColonneDate >=  '20130301'   AND LaColonneDate < '20130401'
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    FROM LaTable
    WHERE LaColonneDate between  '20130301'  AND  '20130431'

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Darkelend, ce n'est pas ce que je cherche, mais merci d'avoir pris le temps de répondre

    Aieeuuuuu, je n'arrive pas à exécuter la requête :s

    Donpi, cela ne peut pas aller dans ma requête car si ma table n'est pas encore rempli


    Enfaite si je peux etre plus précis. je rempli ma table avec diverse dates, exemple 01/02/2014, 05/02/2014, 10/03/2014

    Et avec ma requête en paramètre je voudrai lui dire where date = 02/2014 pour afficher tout les lignes du mois de février.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonsoir,
    D'abord tout dépend du format de date dans lequel vous voudrez afficher les dates voir tuto.

    Je suppose que votre colonne date est nommée ColonneDate. Dans ce cas ici soumis, le format de date le 101 ("01/02/2014').

    Pour sélectionner toutes les dates au format mois/Année, vous poserez simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select substring(convert(varchar, ColonneDate,101),4,7) from MaTable
    .

    Et pour sélectionner toutes les données du mois de février, vous poserez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct * from MaTable where (select substring(convert(varchar, ColonneDate,101),4,7))='02/2014'
    .

    Faites un retour, si vous ne comprennez pas quelque chose.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  7. #7
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par dentfree Voir le message
    Aieeuuuuu, je n'arrive pas à exécuter la requête :s
    ... il faut la copier/coller dans votre analyseur de requête

    --> remplacez les ... par le nom des colonnes
    --> Déclarez la variable @UneDate et affectez lui une valeur DECLARE @UneDate DATETIME = GETDATE(), ou remplacez la dans la requête par une valeur..

    Si après tout ça ça ne fonctionne pas, postez le message d'erreur !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Alexandre, c'est presque parfait
    sa me sélectionne le jour et le l'année et non pas mois + année mais j'ai juste à trouver le bon format avec le tuto que vous m'avez donner. Dans ma base la date est rangée aaaa-mm-jj.

    aieeeuuuuu, je vais essayer de vous tiens au courant mais j'avais compris pour la variable

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,
    Dans ce cas, faites ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT * FROM MaTable WHERE (SELECT substring(convert(varchar, ColonneDate,105),4,7))='02-2014'
    . Vous remplacez le 101, par 105. Voyez bien que c'est écrit "02-2014", et non "02/2014".

    Merci.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  10. #10
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Oui, mais la encore, cette solution ne pourra pas utiliser d'index...

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Je n'ai pas lu qu'il était question d'index, pour les index, il pourra créer une vue avec la requête, en prenant le soin de convenablement convertir la date.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  12. #12
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Certes, il n'a pas été question d'index dans la discussion, mais il est possible, voire probable, que la requête puisse être supportée par un index. Dans un tel cas, la requête telle que je l'ai écrite pourra en profiter automatiquement, ce qui ne sera pas le cas des requêtes qui appliquent une fonction sur la colonne date.

    De plus, tel que j'ai écrit la requête :
    1/ si aucun index n'existe aujourd'hui, il sera néanmoins utilisé automatiquement s'il est créé un jour (pour supporter une autre requête par exemple)
    2/ si l'index n'existe pas mais qu'il s'avère utile, il apparaitra dans la liste des index manquants si toutefois le dba mets le nez dedans.


    De façon générale, il vaut mieux - quand cela est possible - éviter d'appliquer des fonctions aux colonnes dans les filtre de requêtes.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Désoler de ne répondre que maintenant.

    Merci pour les réponses, mais qu'appelez un index???

    Ma table possède comme colonnes : id (int), date (date), parcourt (nvarchar), km (int), repas (int). Et ma requête sert à afficher toutes les informations du mois souhaiter.

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

Discussions similaires

  1. Requête avec date comme critère de sélection
    Par deep-diver dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/09/2006, 11h40
  2. Pb de requête avec date
    Par tedparker dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 24/07/2006, 10h57
  3. Réponses: 4
    Dernier message: 13/02/2006, 18h58
  4. Problème de requête avec dates
    Par charleshbo dans le forum Access
    Réponses: 4
    Dernier message: 08/02/2006, 00h17
  5. Requête avec dates
    Par skyman272 dans le forum Access
    Réponses: 11
    Dernier message: 30/01/2006, 10h16

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