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 :

Déclaration datetime && résultat différent


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Déclaration datetime && résultat différent
    bonjour a tous

    débutant en TSQL j'aimerai s'avoir la différence ente ces deux instructions de déclaration du datetime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE @StartDateTime DATETIME = '2019-09-01T00:00:00' ;
     
    DECLARE @StartDateTime2 DATETIME = '2019-09-01 00:00:00.000' 
     
    print @StartDateTime
     
    print @StartDateTime2
    de plus ci j’exécute l'instruction j'ai deux résultat différents Qui a une petit explication SVP ?
    Images attachées Images attachées  

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Bonjour,

    La première instruction '2019-09-01T00:00:00' utilise le format ISO 8601 (AAAA-MM-JJThh:mm:ss[.mmm]) les millisecondes étant facultatifs.
    Le format ISO 8601 présente un avantage de taille puisqu'il s'agit d'une norme internationale avec une spécification claire. Ce format n’est pas affecté par le paramètre SET DATEFORMAT ou SET LANGUAGE.

    La seconde instruction '2019-09-01 00:00:00.000' utilise un format ODBC sujet à interprétation ! Celle-ci dépend de la langue et la culture ! (French, English, etc.)

    Pour les dates exprimées de manière littérales, il est fortement conseillé d’utiliser le format ISO 8601.
    Dans ton exemple, il faut utiliser la première instruction '2019-09-01T00:00:00' (avec un 'T') Pour exprimer le 1er septembre 2019 (et non le 9 janvier 2019 !)

    Notes enfin que le type DATETIME est obsolète depuis bien longtemps ! et qu’il faut utiliser en lieu et place le type DATETIME2, mais là, c'est un autre sujet .

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  3. #3
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    ok merci pour votre explication

    par contre pourquoi la deuxième print il m'affiche la date 9 janvier au lieu du 1 sep

    normalement je suis bien avec la format AAAA-MM-JJ HH:mm:sss.ms ce qui n'est pas le cas (voir mon exemple )

  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
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    pour compléter, DECLARE @StartDateTime2 DATETIME = '2019-09-01 00:00:00.000' ressemble au format ODBC, mais n'est pas interprété comme tel avec le type DATETIME (au format ODBC, il s'agit bien du 1er septembre 2019), mais est interprété en fonction du paramètre DATEFORMAT.

    Pour le format ODBC, il faudrait écrire DECLARE @StartDateTime2 DATETIME = {ts'2019-09-01 00:00:00.000'}.

    A noter également que DATETIME2, au format [aa]aa-mm-jj, n'est pas sensible au paramètre DATEFORMAT, donc DECLARE @StartDateTime2 DATETIME2 = '2019-09-01 00:00:00.000' aurait aussi était interprété comme le 1er septembre contrairement à ce que fait DATETIME.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/01/2006, 19h34
  2. [W3C] Résultats différents avec IE ou FF
    Par Linoa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/11/2005, 13h45
  3. Résultats différent entre une requête SQL, et la même en VBA
    Par thetaps dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/09/2005, 12h05
  4. Encode - Decode : probleme, résultats différent.
    Par barok dans le forum Administration
    Réponses: 1
    Dernier message: 26/08/2005, 10h43
  5. Réponses: 15
    Dernier message: 21/01/2005, 03h25

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