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 :

Manipulation de format de date


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut Manipulation de format de date
    Bonjour,

    J'ai un petit problème tout bête mais qui commence à m'énerver car je n'en comprend pas tout les tentants et aboutissants.

    Dans une requête de mise à jour d'une procédure stockée, je souhaite affecter à une colonne de type DATETIME la valeur de la date-heure courante, sans la précision milli-secondes (donc qui sont nulles).
    Pour ce faire, j'ai commencé à utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONVERT(VARCHAR, GETDATE(), 20)
    qui passe avec l'analyseur de requête mais qui me provoque une erreur avec le SQL Agent.

    J'ai ensuite essayé naivement celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONVERT(CHAR(19), GETDATE())
    qui ne passe ni avec l'Analyseur de requête, ni avec le SQL Agent.

    Dans le procédure stockée, j'ai essayé de jouer avec SET DATEFORMAT, ce qui m'entraîne d'autres erreurs ailleurs dans le code de la PS.

    Les erreurs sont du style :
    Msg 242, Sev 16 : La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure.
    Il est facile d'avoir un format avec juste les minutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONVERT(SMALLDATETIME, GETDATE())
    Mais j'ai besoin des secondes et les milli-secondes doivent être obligatoirement nulles.

    J'ai trouvé plein d'infos sur le sujet, mais rien qui n'arrive à éclairer ma lanterne.

    Merci d'avance pour votre aide.

  2. #2
    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
    Par défaut
    Bonjour,

    Le type DATETIME stocke les millisecondes, que vous le vouliez ou non

    Il me semble que vous pourriez utiliser DATETIME2(0), pour votre besoin, mais je ne suis pas sur de l'avoir bien compris...

    Pourquoi ne voulez vous pas stocker les millisecondes (faites vous des comparaisons d'heure, et vous ne voulez pas que les millisecondes soient prise en compte dans la comparaison ?)

    Si c'est pour de l'affichage, vous pouvez effectuer votre CONVERT dans votre requete SELECT

  3. #3
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Bonjour,

    Oui le but n'est pas de créer une nouveau type.

    C'est juste que le progiciel qui attaque ces données a été configuré pour ne prendre en compte que les secondes. Les milli-secondes lui posent des problèmes.

    Donc au lieu d'avoir une date du type 2011-03-23 15:21:46.238, il faut que je la transforme en 2011-03-23 15:21:46.000.

    Il me paraissait plus immédiat de procéder avec une conversion basée sur une chaîne de caractères plutôt qu'une manipulation de la date a format numérique.

    De plus le serveur est sous Windows SQL 2000, donc les seuls formats de date sont DATETIME et SMALLDATETIME

  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
    Par défaut
    En fait, votre premier code devrait être bon !

    qui passe avec l'analyseur de requête mais qui me provoque une erreur avec le SQL Agent.
    quelle erreur ?
    dans quel contexte l'utilisez-vous ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Avec une double conversion pour faire sauter la précision des millisecondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select getdate() as c1,
           convert(datetime, convert(varchar(19), getdate(), 126), 126) as c2
     
    c1                      c2
    ----------------------- -----------------------
    2011-03-23 16:30:17.703 2011-03-23 16:30:17.000

  6. #6
    FMJ
    FMJ est déconnecté
    Membre éclairé
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 417
    Par défaut
    Pour les erreurs, j'ai donné un exemple ci-dessus qui je pense correspond à la totalité des messages d'erreur (une variante entre CHAR et VARCHAR).

    Quant au contexte du SQL Agent, je viens de regarder :
    Il démarre sur le compte Local System
    Quant à la connexion, il était sur une authentification Windows que je viens de changer en authentification SQL, avec la même connexion que l'Analyseur.

    Je fais des test et un retour ensuite.

  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
    Par défaut
    désolé, je me suis mal exprimé, quand je demandais le contexte, c'était surtout pour savoir dans quel ordre SQL le CONVERT etait utilsé
    (dans un SELECT, dans un UPDATE..SELECT, dans une SP avec SET @VAR = CONVERT... ?)

    En fait ce serait bien de donner le script complet, car par exemple, à partir de votre premier code, ceci fonctionne bien :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CONVERT(VARCHAR, GETDATE(), 20)

    ------------------------------
    2011-03-23 17:14:37

    (1 row(s) affected)
    je pense donc que c'est quand vous essayez d'utiliser cette conversion pour autre chose que cela génére l'erreur (d’ailleurs c'est une erreur de conversion de CHAR vers DATETIME et non l'inverse)... ce serait donc utile d'avoir ce code...

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

Discussions similaires

  1. Manipulation des formats date
    Par salmabarik dans le forum SAS Base
    Réponses: 1
    Dernier message: 26/07/2013, 08h06
  2. [AC-2003] Manipuler le format date/heure
    Par Fcnaatao dans le forum Access
    Réponses: 7
    Dernier message: 11/05/2012, 14h35
  3. Manipulation de formats de date
    Par muaddibx dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/07/2009, 14h54
  4. Manipuler le format retourné pour une date.
    Par BlackMinou dans le forum Oracle
    Réponses: 3
    Dernier message: 05/04/2006, 18h01
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

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