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 :

Pb avec un SET pour une variable DATETIME


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Pb avec un SET pour une variable DATETIME
    Bonjour,
    Voici le début de ma requête SELECT. J'ai un pb avec les variables.
    J'ai essayé 2 syntaxes différentes mais j'obtiens la même erreur.
    Msg*242, Niveau*16, État*3, Ligne*3
    La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @P1 smallint,@P2 smallint,@P3 datetime,@P4 smallint,@P5 datetime
     
    SET @P3 = (cast('2011-05-22 00:00:00' AS DATETIME) );
    SET @P5 = '2011-04-22 00:00:00';
    Auriez-vous une idée de ce qui ne va pas ?

    Merci
    Thibault

  2. #2
    Invité
    Invité(e)
    Par défaut
    Non, pas d'idée car votre code me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Command(s) completed successfully.
    Je parierais sur une coquille du genre une année 20011.

    Cela dit, donnez-nous votre vraie code d'origine et on pourra chercher vraiment.
    C'est quoi votre version en passant?

  3. #3
    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
    Pour éviter définitivement ce genre d'erreur ou problème, prends l'habitude d'utiliser le format ISO8601
    yyyy-mm-ddThh:mm:ss[.mmm]

    Le format ISO8601 présente un avantage de taille puisqu'il s'agit d'une norme internationale. De plus, les valeurs datetime spécifiées dans ce format ne sont jamais ambiguës. Ce format n'est pas affecté par les paramètres SET DATEFORMAT ou SET LANGUAGE.

    Pour revenir à ton exemple, tu peux le réécrire comme indiqué ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @P1 smallint, @P2 smallint,@P3 datetime,@P4 smallint,@P5 datetime
     
    SET @P3 = '2011-05-22T00:00:00'; 
    SET @P5 = '2011-04-22T00:00:00';
    A+

  4. #4
    Membre émérite

    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
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par hmira Voir le message
    Pour éviter définitivement ce genre d'erreur ou problème, prends l'habitude d'utiliser le format ISO8601
    yyyy-mm-ddThh:mm:ss[.mmm]

    Le format ISO8601 présente un avantage de taille puisqu'il s'agit d'une norme internationale. De plus, les valeurs datetime spécifiées dans ce format ne sont jamais ambiguës. Ce format n'est pas affecté par les paramètres SET DATEFORMAT ou SET LANGUAGE.

    A+

    J'ai abordé le sujet ici

  5. #5
    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 : 43
    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,

    J'allais répondre ce qu'à écrit zinzineti à la fin de son billet : sans les tirets, cela fonctionne tout le temps, quel que soit le langage.

    En ce qui concerne la norme, elle autorise les deux représentations si j'en crois cet article (qui n'est pas dans son équivalent français):

    the standard allows both the YYYY-MM-DD and YYYYMMDD formats for complete calendar date representations
    @++

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par tibofo Voir le message
    Bonjour,
    Voici le début de ma requête SELECT. J'ai un pb avec les variables.
    J'ai essayé 2 syntaxes différentes mais j'obtiens la même erreur.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @P1 smallint,@P2 smallint,@P3 datetime,@P4 smallint,@P5 datetime
     
    SET @P3 = (cast('2011-05-22 00:00:00' AS DATETIME) );
    SET @P5 = '2011-04-22 00:00:00';
    Auriez-vous une idée de ce qui ne va pas ?

    Merci
    Thibault
    Si

    SET @P3 = (cast('2011-05-05 00:00:00' AS DATETIME) );

    fonctionne, c'est que dans votre configuration le second nombre est le jour et non le mois.

  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 912
    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 912
    Points : 51 681
    Points
    51 681
    Billets dans le blog
    6
    Par défaut
    DATETIME ne supporte que la syntaxe ISO courte (par ce que il a été créé il y a longtemps du temps de Sybase).
    DATETIME2 supporte la syntaxe ISO longue.

    A +

  8. #8
    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 : 43
    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
    Ce que je fais assez souvent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @toto datetime = '20110502 18:12:25.333'
    Fonctionne parfaitement, quel que soit le langage de la session.

    @++

Discussions similaires

  1. Problème avec le paramètrage d'une variable dans un lien pour un panier
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/09/2011, 13h07
  2. [MySQL] Problème avec la récupération d'une variable dans un lien pour un panier
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/06/2011, 13h58
  3. SET d'une variable avec scanmem
    Par M.Dolly dans le forum Administration système
    Réponses: 0
    Dernier message: 14/05/2011, 17h39
  4. Réponses: 1
    Dernier message: 14/02/2007, 17h08
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h22

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