2009-10-12 14 views
1

J'ai des données formatées "2009-07-17T00: 00: 00-05: 00" dans la variable varchar. Comment est-ce que je peux convertir ces données au champ de datetime dans le serveur de MS SQL en utilisant la requête ou le TSQL?Valeur de date-heure SQL

+0

quoi de neuf '-05: 00'? une forme de millisecondes? – dotjoe

+0

dotjoe: C'est le fuseau horaire. –

+1

sont tous les champs 'comme '% -05: 00''? Va probablement devoir convertir en datetime standard en utilisant des fonctions de chaîne. – dotjoe

Répondre

4

Si vous êtes sur SQL Server 2008, vous pouvez utiliser le type datetimeoffset:

select cast('2009-07-17T00:00:00-05:00' as datetimeoffset) 

Puisque vous êtes en 2005, datetimeoffset type de données ne sont pas disponibles pour vous. Vous devez décider si vous souhaitez conserver les informations sur les fuseaux horaires séparément. Si vous voulez juste la datetime partie, bande juste la partie de fuseau horaire de la chaîne et de le jeter comme datetime:

select cast(left('2009-07-17T00:00:00-5:00', 19) as datetime) 
+0

d'une manière ou d'une autre ça ne marche pas. shows "Type datetimeoffset n'est pas un type de système défini." Que devrais-je faire? – THEn

+0

Quelle version de SQL Server utilisez-vous? 'datetimeoffset' est nouveau en 2008. –

+0

Microsoft SQL Server 2005 - 9.00.1406.00 (X64) 3 mars 2007 19:53:24 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64 bits) sur Windows NT 5.2 (Build 3790: Service Pack 2) – THEn

2

Cast DATETIME ne fonctionnera pas, mais ce format est un format datetime XML valide, donc vous pouvez d'abord acheminer le transtypage à travers un type XML:

declare @d varchar(50); 
select @d = '2009-07-17T00:00:00-05:00'; 

select x.value(N'.', N'datetime') from (select cast(@d as xml) as x) as t; 
+0

oui. ces données proviennent du fichier XML. J'ai utilisé SELECT [StartDate] DE OPENXML (@iTree, '/ List/DailyUpdate', 2) AVEC ([STARTDATE] varchar (50)) un moyen de le faire en SQL? J'ai essayé datetime il ne fonctionne pas ... – THEn

+1

Pouvez-vous utiliser des méthodes XML au lieu d'OPENXML? OPENXML est un dinosaure ... Dites simplement 'SELECT xmlfield.value (N '(/ List/Daily/Update) [1]', N'datetime ') FROM table'. Avec OPENXML, vous devez utiliser la syntaxe WITH pour spécifier le schéma du retour et mapper StartDate à datetime: 'SELECT StartDate FROM OPENXML (...) WITH (DateDate de début)'. –

+0

La requête de la réponse indique également "La conversion a échoué lors de la conversion de la date et de l'heure à partir de la chaîne de caractères". une idée ? – THEn

Questions connexes