Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 10h18   #1
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
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!
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h55   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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

Citation:
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 :
1
2
3
4
5
6
 
DECLARE @d DATETIME2(3)
 
SET @d = '2011-05-20 09:23:04.000000000'
 
SELECT @d

Citation:
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 :
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
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 12h20   #3
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
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 :
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 :
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.
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 12h35   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

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

Code :
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 :
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
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/05/2011, 14h03   #5
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
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 :
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
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 14h26   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Citation:
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 :
DECLARE @toto datetime = '2011-05-20 13:42:46.244'
Si ça plante, essayez ceci :

Code :
DECLARE @toto datetime = '20110520 13:42:46.244'
Qu'est-que ça donne ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h12.


 
 
 
 
Partenaires

Hébergement Web