Comment faire pour convertir un DateTime chaîne DateTime de SQL Server

J'ai un DateTime varchar dans ce format: 2005-08-08T00:00:00+01:00.

  1. Ne ce format ont un nom? (ce n'est pas ISO8601. Est-il RFC3339?)
  2. Comment puis-je convertir un DateTime l'aide d'instructions Transact-Sql?

MODIFIER
Voici un résumé de la réponse, bricolé à partir d'autres entrées:

  1. Il est ISO8601 avec un décalage de l'heure UTC. Si c'était UTC ce serait la fin avec un " Z "au lieu de" +01:00'. wikipédia
  2. Vous pouvez le convertir à l'heure locale ou l'heure utc comme suit:

    DECLARE @d VARCHAR(25) SET @d = '2007-08-08T00:01:00+01:00' SET @d =
    '2007-08-08T00:01:00-01:00' SET @d = '2007-08-08T00:01:00+05:30'

    SELECT @d Entrée, CONVERT(DATETIME, à GAUCHE(@d, 19), 126) LocalDate
    DATEADD(MINUTE , -CAST((SUBSTRING(@d, 20, 1) + DROIT(@d, 2))
    INT) , DATEADD(HEURE
    ,-CAST(SUBSTRING(@d, 20, 3) COMME INT)
    CONVERT(DATETIME, à GAUCHE(@d, 19), 126))) UtcDate OÙ @d COMME '_--_T__::[+-]:'

Résultats:

Input                     LocalDate               UtcDate
------------------------- ----------------------- -----------------------
2007-08-08T00:01:00+01:00 2007-08-08 00:01:00.000 2007-08-07 23:01:00.000

2007-08-08T00:01:00-01:00 2007-08-08 00:01:00.000 2007-08-08 01:01:00.000

2007-08-08T00:01:00+05:30 2007-08-08 00:01:00.000 2007-08-07 18:31:00.000
Veuillez vérifier cette page--> sqlusa.com/bestpractices/datetimeconversion
Oui, j'ai trouvé que la page d'aide de google. Impossible de trouver mon format en il y bien que.
Une chose à noter est que votre SUBSTRING() supprime le procès-verbal de la composante de l'fuseau horaire, sens il être incorrecte dans les fuseaux horaires qui ne sont pas des heures entières par rapport à l'heure UTC. par exemple, en Inde, qui est UTC+5:30.
ah, aussi, si le format est quelque chose comme 2005-08-08T00:00:00-01:00, c'est à dire le décalage est moins à la place de la positif, votre résultat sera faux.
Rory - j'ai édité le sql pour calculer l'utc correctement lorsque les fuseaux horaires ne sont pas des heures entières, mais je ne peux pas voir quelque chose de mal avec le calcul lorsque le décalage est moins de voir les résultats ci-dessus

OriginalL'auteur Colin | 2012-04-24