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 :

Comparaison de deux dates


Sujet :

MS SQL Server

  1. #1
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut Comparaison de deux dates
    Bonjour,
    Je confronte un petit problème de comparaison de deux dates.
    j'ai une table MATABLE contenant un seul champ monChamp de type DATETIME. Elle contient un seul enregistrement dont le contenu est par exemple 26/09/2012 16:55:55.

    Alors lorsque j'exécute la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM MATABLE
    WHERE monChamp > '26/09/2012 16:55:55'
    Elle n'est censée me retourner aucun enregistrement non ?
    Beh lorsque je l'exécute j'ai bien une ligne qui s'affiche !!

    P.S: je ne veux pas modifier ma valeur fixe qui est 26/09/2012 16:55:55 ! donc je dois comparer mon champ avec exactement cette valeur !

    Lorsque je modifie la valeur 26/09/2012 16:55:55 par 26/09/2012 16:55:56 alors la requête :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM MATABLE
    WHERE monChamp > '26/09/2012 16:55:56'
    Alors aucune ligne ne s'affiche mais c'est comme je l'ai expliqué je ne veux pas modifier ma valeur 26/09/2012 16:55:55 !


    Quelqu'un a une explication ?

    Merci d'avance

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Il n'y a pas de champ dans une base de données mais des tables et des colonnes...

    Un datetime stocke également les millisecondes...

    Normal donc que SQL SERVER vous retourne quelque chose...
    pour vous en convaincre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select DATEPART(millisecond,monChamp)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    De plus cette représentation des dates n'est pas correcte? Pour un DATETIME, la représentation correte est :
    AAAAMMJJ hh:mm:ss.nnn

    Exemple :
    Tout autre format risque de provoquer des erreurs, à moins d'avoir paramétré votre session avec SET DATEFORMAT.

    À me lire : http://baptiste-wicht.developpez.com...-sql/datetime/

    A +

  4. #4
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Votre lien aboutit à une belle : Page introuvable

    La page que vous recherchez est introuvable. Si vous suiviez un lien valide, contactez-moi pour m'indiquer l'erreur.


    Sinon qu'est ce que vous me proposez dans mon cas ?



    Citation Envoyé par SQLpro Voir le message
    De plus cette représentation des dates n'est pas correcte? Pour un DATETIME, la représentation correte est :
    AAAAMMJJ hh:mm:ss.nnn

    Exemple :
    Tout autre format risque de provoquer des erreurs, à moins d'avoir paramétré votre session avec SET DATEFORMAT.

    À me lire : http://baptiste-wicht.developpez.com...-sql/datetime/

    A +

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    quelle version de SQL SERVER?

  6. #6
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    version SQL Server 2005

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6

  8. #8
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par JauB Voir le message
    Quelqu'un a une explication ?
    Sans doute, la valeur dans la BDD stocke les millisecondes. Pour en vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT convert(nvarchar(24), monChamp, 121) AS monChampISO
    FROM MATABLE

  9. #9
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Sans doute, la valeur dans la BDD stocke les millisecondes

    Un datetime stocke également les millisecondes...

    Normal donc que SQL SERVER vous retourne quelque chose...

  10. #10
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    iberserk,

    il y a une grosse différence entre "peut stocker les millisecondes" et "stocke les millisecondes réellement et non pas les zéros". Afin d'en vérifier il faut utiliser une requête simple au-dessus.

  11. #11
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    C'est pourquoi je lui demandais ceci:

    SELECT DATEPART(millisecond,monChamp)

  12. #12
    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
    Vous comparez une colonne datetime à une chaîne de caractère. Il y a donc une conversion implicite que vous ne voyez pas.
    Votre problème est probablement que le format de conversion implicite ne correspond pas au format de la chaîne que vous avez saisi.

    Il faut utiliser ce que vous a écrit SQL*Pro plus haut, une chaîne au format ISO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM MATABLE
     WHERE monChamp > '20120926 16:55:55'

  13. #13
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par iberserk Voir le message
    C'est pourquoi je lui demandais ceci:
    Ah oui, on fait la double alors

Discussions similaires

  1. [MySQL] comparaison de deux dates dans un ordre sql
    Par opeo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/03/2007, 14h34
  2. comparaison de deux dates
    Par gloglo dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 16/01/2007, 13h39
  3. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  4. comparaison de deux dates
    Par colombe dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/07/2006, 18h44
  5. [VB6] Comparaison de deux dates dans une requête
    Par paradeofphp dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/06/2006, 19h45

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