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 :

changer une date en format timestamp ->(2011-05-20 09:23:04.000)


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Par défaut changer une date en format timestamp ->(2011-05-20 09:23:04.000)
    Bonjour J'ai une date sous ce format:
    2011-05-20 09:23:04.000000000 et je souhaiterai le mettre dans ce format
    2011-05-20 09:23:04.000 pour pouvoir l'insérer dans ma base.


    Car quand j'essaie d'insérer directement 2011-05-20 09:23:04.000000000 j'ai une erreur:Échec de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères.
    Aidez moi svp!

  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
    Citation Envoyé par sajodia Voir le message
    J'ai une date sous ce format:
    2011-05-20 09:23:04.000000000
    D'ou provient cette date et quel est son type

    et je souhaiterai le mettre dans ce format
    2011-05-20 09:23:04.000 pour pouvoir l'insérer dans ma base.
    Si vous êtes en version 2008 (vous n'avez pas précisé), votre format original sera accepté par un DATETIME2, et si vous n'avez pas besoin d'autant de précision, vous pouvez utiliser un DATETIME2(3):

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DECLARE @d DATETIME2(3)
     
    SET @d = '2011-05-20 09:23:04.000000000'
     
    SELECT @d

    2011-05-20 09:23:04.000
    Si votre colonne de destination est en DATETIME, la conversion ne devrait pas poser de souci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DECLARE @d2 DATETIME2(3)
    DECLARE @d DATETIME
     
    SET @d2 = '2011-05-20 09:23:04.000000000'
     
    SET @d =  @d2
     
    SELECT @d, @d2

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Par défaut
    ma date que je récupére au format:2011-05-20 11:42:48.000000000
    provient d'une fonction spécifique à cohéris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var madate = f_get_field_date();
    ensuite
    var date=madate.substr(0, 23); pour avoir 2011-05-20 11:42:48.000

    Et voici ma requete d'insertion de ma date avec d'autres variables dans sqlserver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO CTIERS (CT_CODE, REFERENCE, CT_DATE,CO_CODE,CT_ADRESSE,CT_CP,CT_VILLE ,CT_INT01) VALUES (41,174,'2011-05-20 11:42:48.000','FRA', 'testprospect52' ,'80000','amiens',1);
    J'ai une erreur:
    La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
    L'instruction a été arrêtée.

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

    Marrant ... Sous SQL Server 2008 (est-ce la version que vous utilisez ?) je viens de tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @toto datetime2(7) = '2011-05-20 11:42:48.000'
    Qui fonctionne proprement.
    J'ai ensuite essayé avec tous les types de données de temps :

    - datetime
    - datetime2(X), X allant de 1 à 7
    - date
    - time
    - datetimeoffset(X), X allant de 1 à 7

    Pas d'erreur

    Donc ce que le type de données de la colonne CT_DATE n'est pas un type qui permet de gérer des dates.

    Quel est le type de la colonne CT_DATE ?
    La requête suivante vous le donnera :

    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
    SELECT		S.name AS schema_name
    		, T.name AS table_name
    		, C.name AS column_name
    		, C.column_id
    		, TY.name AS data_type_name
    		, CASE WHEN TY.name IN ('nchar', 'nvarchar') THEN C.max_length / 2 ELSE C.max_length END AS max_length
    		, C.scale
    		, C.precision
    		, C.collation_name
    FROM		sys.schemas AS S
    INNER JOIN	sys.tables AS T
    			ON S.schema_id = T.schema_id
    INNER JOIN	sys.columns AS C 
    			ON C.object_id = T.object_id
    INNER JOIN	sys.types AS TY
    			ON TY.system_type_id = C.system_type_id
    			AND TY.system_type_id = TY.user_type_id
    WHERE		1 = 1
    AND		S.name = 'dbo'
    AND		T.name = 'CTIERS'
    AND		C.name = 'CT_DATE'
    ORDER BY	T.name, C.column_id
    @++

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 141
    Par défaut
    Oui c'est bien sous SQL Server 2008
    le type de mon champ CT_DATE est datetime.
    .


    Je ne vois vraiment pas aussi ce qui cloche:
    comme je vous l'ai dis l'insert génére une erreur:
    La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
    L'instruction a été arrêtée.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO CTIERS (CT_CODE, REFERENCE, CT_DATE,CO_CODE,CT_ADRESSE,CT_CP,CT_VILLE ,CT_INT01) VALUES (41,175,'2011-05-20 13:42:46.244','FRA', 'testprospect53' ,'80000','amiens',1)
    je ne sais vraiment pas aussi ce qui se passe
    Aidez moi svp

  6. #6
    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
    Par défaut
    le type de mon champ CT_DATE est datetime.
    Est-ce que c'est bien ce que vous montre ma requête ?

    Essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @toto datetime = '2011-05-20 13:42:46.244'
    Si ça plante, essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @toto datetime = '20110520 13:42:46.244'
    Qu'est-que ça donne ?

    @++

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2013, 09h49
  2. Formater une date via un timestamp UNIX et un modèle modifiable
    Par Aldéhir dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 7
    Dernier message: 11/09/2007, 16h43
  3. Réponses: 7
    Dernier message: 03/07/2007, 11h03
  4. Réponses: 1
    Dernier message: 07/06/2005, 14h00
  5. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28

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