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

Développement SQL Server Discussion :

Comparer une date avec la date du jour


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut Comparer une date avec la date du jour
    Bonjour

    J'ai une table qui contient un champ de type DateTime, les données de ce champ sont dès fois avec l'heure et des fois sans l'heure.

    Je veux comparer ce champ avec la date du jour et ca ne me donne pas le résultat escompté.

    voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from TABLE_TOTO where Champ_Date = getdate()
    Je veux comparer juste le jour, pas besoin de l'heure.

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ca donne quoi en convertissant en date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE_TOTO WHERE cast(Champ_Date as date) = getdate()

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Ca donne quoi en convertissant en date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE_TOTO WHERE cast(Champ_Date as date) = getdate()
    Ca me donne le message suivant :

    Type date is not a defined system type.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Quel est ton SGBD ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par DEV-10 Voir le message
    Ca me donne le message suivant :

    SQL SERVER 2000

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par DEV-10 Voir le message
    SQL SERVER 2000

    L'instruction

    me donne

    Jul 21 2009 3:01PM

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je connais pas sqlserver désolé.
    J'ai trouvé :
    http://www.bennadel.com/blog/122-Get...SQL-Server.htm

    Mais je ne sais pas si c'est ce dont tu as besoin.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    De bons liens !

    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM TABLE_TOTO
     WHERE Champ_Date >= CAST(FLOOR(CAST(getdate() as float)) as datetime)
       and Champ_Date <  CAST(FLOOR(CAST(getdate() as float)) as datetime) + 1

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Je connais pas sqlserver désolé.
    J'ai trouvé :
    http://www.bennadel.com/blog/122-Get...SQL-Server.htm

    Mais je ne sais pas si c'est ce dont tu as besoin.

    Merci beaucoup pour le lien.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par Waldar Voir le message
    De bons liens !

    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM TABLE_TOTO
     WHERE Champ_Date >= CAST(FLOOR(CAST(getdate() as float)) as datetime)
       and Champ_Date <  CAST(FLOOR(CAST(getdate() as float)) as datetime) + 1

    Oui ca me donne le résultat recherché. peux-tu m'expliquer le pourquoi de la nécessité de toutes ces fonctions.

    Est-ce qu'il y a une autre méthode plus simple ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 61
    Points : 57
    Points
    57
    Par défaut
    Je veux bien essayer de te donner une explication :
    Si on décompose :

    CAST(getdate() AS float) --> Transforme la date en float. La partie entière, donne le nombre de jours écoulés depuis le 1 er janvier 1900. La partie décimale représente l'heure.

    Exemple : select cast(CAST('19000101 12:00:00' as datetime) AS float)
    Donne 0,5 (0 nombre de jour depuis le 1 janvier 1900 et .5 l'heure (soit une demie journée))

    FLOOR(CAST(getdate() AS float)) --> Supprime la partie décimale (donc les heures)

    CAST(FLOOR(CAST(getdate() AS float)) AS datetime) --> Retransforme le nombre de jour entier au format DateTime. Au final donc, on a bien supprimé les heures de notre date.

    A priori pas vraiment de méthode plus simple ou plus rapide... Tu peux faire select cast(convert(char(8),getdate(),112) as datetime). C'est plus lisible peut être mais je pense nettement moins performant...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut Résolu
    Citation Envoyé par achestyx Voir le message
    Je veux bien essayer de te donner une explication :
    Si on décompose :

    CAST(getdate() AS float) --> Transforme la date en float. La partie entière, donne le nombre de jours écoulés depuis le 1 er janvier 1900. La partie décimale représente l'heure.

    Exemple : select cast(CAST('19000101 12:00:00' as datetime) AS float)
    Donne 0,5 (0 nombre de jour depuis le 1 janvier 1900 et .5 l'heure (soit une demie journée))

    FLOOR(CAST(getdate() AS float)) --> Supprime la partie décimale (donc les heures)

    CAST(FLOOR(CAST(getdate() AS float)) AS datetime) --> Retransforme le nombre de jour entier au format DateTime. Au final donc, on a bien supprimé les heures de notre date.

    A priori pas vraiment de méthode plus simple ou plus rapide... Tu peux faire select cast(convert(char(8),getdate(),112) as datetime). C'est plus lisible peut être mais je pense nettement moins performant...
    Merci bien pour ces explications achestyx.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par Waldar Voir le message
    De bons liens !

    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM TABLE_TOTO
     WHERE Champ_Date >= CAST(FLOOR(CAST(getdate() as float)) as datetime)
       and Champ_Date <  CAST(FLOOR(CAST(getdate() as float)) as datetime) + 1
    Bonjour Wadar

    Cette requête me donne le résultat, toute fois j'aimerai sgarder même les heures car dès fois je veux comparer que mes enregistrements soient triés selon le jour et aussi l'heure de saisi.

    Qu'est ce qu'il faut modifier ? j'ai enlevé le FLOOR mais ca me donne pas le bon résultat.

    Merci.

  14. #14
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Deux possibilités :

    - soit vous souhaitez simplement requêter la table pour avoir visu de ce qu'elle contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM TABLE_TOTO
    WHERE Champ_Date BETWEEN 'AAAAMMJJ HH:mm:ss' AND 'AAAAMMJJ HH:mm:ss'
    - soit vous souhaitez écrire une procédure stockée qui vous retournera les lignes qui correspondent à vos critères de recherche :

    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
    24
    25
    CREATE PROCEDURE Ps_MaProcedure
    	@dateDebut DATETIME,
    	@dateFin DATETIME
    AS
    BEGIN
    	IF @dateDebut IS NULL
    		OR @dateFin IS NULL
    	BEGIN
    		RAISERROR('Les dates de début et de fin doivent être valuées', 16, 1)
    	END
     
    	-- Si la date de début est postérieure à la date de fin,
    	-- on échange les valeurs des variables
    	IF @dateDebut > @dateFin
    	BEGIN
    		DECLARE @dateAux DATETIME
    		SET @dateAux = @dateFin
    		SET @dateFin = @dateDebut
    		SET @dateDebut = @dateAux
    	END
     
    	SELECT mesColonnes
    	FROM dbo.TABLE_TOTO
    	WHERE Champ_Date BETWEEN @dateDebut AND @dateFin
    END
    @++

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Deux possibilités :

    - soit vous souhaitez simplement requêter la table pour avoir visu de ce qu'elle contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM TABLE_TOTO
    WHERE Champ_Date BETWEEN 'AAAAMMJJ HH:mm:ss' AND 'AAAAMMJJ HH:mm:ss'
    - soit vous souhaitez écrire une procédure stockée qui vous retournera les lignes qui correspondent à vos critères de recherche :

    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
    24
    25
    CREATE PROCEDURE Ps_MaProcedure
        @dateDebut DATETIME,
        @dateFin DATETIME
    AS
    BEGIN
        IF @dateDebut IS NULL
            OR @dateFin IS NULL
        BEGIN
            RAISERROR('Les dates de début et de fin doivent être valuées', 16, 1)
        END
     
        -- Si la date de début est postérieure à la date de fin,
        -- on échange les valeurs des variables
        IF @dateDebut > @dateFin
        BEGIN
            DECLARE @dateAux DATETIME
            SET @dateAux = @dateFin
            SET @dateFin = @dateDebut
            SET @dateDebut = @dateAux
        END
     
        SELECT mesColonnes
        FROM dbo.TABLE_TOTO
        WHERE Champ_Date BETWEEN @dateDebut AND @dateFin
    END
    @++
    ce que je cherche c'est de trouver un moyen simple pour comparer la date d'une colonne avec la date du jour Getdate()

    Je lis la première ligne de la table TOTO
    Je compare la colonne date_X avec la date du jour du système
    Si la date Date_X = date du jour
    Prendre cette ligne et la mettre dans une autre table TOTO_2
    Je lis la deuxième ligne de la table TOTO
    ....................
    .................
    Je lis jusqu'à la dernière ligne.

    Bref, c'est un select qui lis la table, et qui prend toutes les lignes dont les dates sont égales à celles du jour, sauf que je veux garder l'heure aussi pour que je puisse trier ma nouvelle table TOTO_2 du plutôt dans la journée au plus tard dans la journnée.

    Note : J'aurais besoin de comparer la date mais garder l'heure.

    l'exemple suivant marchait bien, mais il supprime la partie qui affiche l'heure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM TABLE_TOTO
     WHERE Champ_Date >= CAST(FLOOR(CAST(getdate() AS float)) AS datetime)
       AND Champ_Date <  CAST(FLOOR(CAST(getdate() AS float)) AS datetime) + 1
    Est-ce que tu penses que ta procédure répond bien à ce que je cherche ?

    Note : Ma colonne Date_X est de la forme : jj/mm/aaaa hh:mm:ss

    Merci.

  16. #16
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Bonjour, la solution suivante répond peut être à votre problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM TABLE_TOTO WHERE convert(char(10), champ_date,103)=convert(char(10),getdate(),103);

  17. #17
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je ne comprends pas très bien votre problème.

    Je ne fais aucune modification de données sur les colonnes de votre table, le seul but de la requête est de comparer le jour par rapport à getdate().

    S'il n'y a pas l'heure à l'issue de la requête c'est qu'elle n'était pas initialement présente... ou alors que vous ne la voyez simplement pas.

    Que donne la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Champ_Date, CONVERT(Champ_Date, 120) AS Champ_Date_120
      FROM TABLE_TOTO
     WHERE Champ_Date >= CAST(FLOOR(CAST(getdate() AS float)) AS datetime)
       AND Champ_Date <  CAST(FLOOR(CAST(getdate() AS float)) AS datetime) + 1

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Je ne comprends pas très bien votre problème.

    Je ne fais aucune modification de données sur les colonnes de votre table, le seul but de la requête est de comparer le jour par rapport à getdate().

    S'il n'y a pas l'heure à l'issue de la requête c'est qu'elle n'était pas initialement présente... ou alors que vous ne la voyez simplement pas.

    Que donne la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Champ_Date, CONVERT(Champ_Date, 120) AS Champ_Date_120
      FROM TABLE_TOTO
     WHERE Champ_Date >= CAST(FLOOR(CAST(getdate() AS float)) AS datetime)
       AND Champ_Date <  CAST(FLOOR(CAST(getdate() AS float)) AS datetime) + 1
    Ca me donne une erreur :
    Server: Msg 243, Level 16, State 1, Line 1
    Type Champ_Date is not a defined system type.
    Pourtant Champ_Date est bien le nom de ma colonne.

  19. #19
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il va falloir la description de votre table.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Salut Waldar

    je ce que je veux c'est :

    filtrer une table pour obtenir toutes les dates > date_x et <= à la date du jour.

    faut que :
    date_x < date_a_comparer <= getdate()
    le type de la colonne à comparer date_a_comparer est DATETIME. son contenu contient les dates et dès fois les heures aussi.

    la variabke date_x et une une valeur retournée d'une fonction. son type est datetime aussi.

    Je veux que la date au complet soit prise en compe, l'année, le mois, le jour, et même les heures, les minutes, et les secondes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print  CAST(FLOOR(CAST(getdate() AS float)) AS datetime) + 1
    me donne
    Aug 11 2009 12:00AM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print  CAST(FLOOR(CAST(getdate() AS float)) AS datetime)
    me donne
    Aug 10 2009 12:00AM
    et me donne
    Aug 10 2009 9:23AM
    on remarque que les premiers PRINT tronque les heures et me retournent 12:00 alors qu'il devait retourner 9:23 AM

    Il est actuellement Aug 10 2009 9:23AM

    Merci.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comparer une date avec la date du jour
    Par Med_be dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/05/2011, 18h24
  2. Renommer une feuille avec la date du jour
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/08/2007, 08h21
  3. Réponses: 1
    Dernier message: 03/07/2007, 06h43
  4. Réponses: 9
    Dernier message: 14/06/2007, 16h43
  5. [Dates] Comparer une variable avec 2 éléments
    Par oceane751 dans le forum Langage
    Réponses: 14
    Dernier message: 07/01/2007, 17h54

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