TSQL DATETIME ISO 8601

On m'a donné une spécification qui nécessite le format de date ISO 8601, est-ce que quelqu'un connaît les codes de conversion ou un moyen d'obtenir ces 2 exemples:

ISO 8601 Extended Date 2000-01-14T13:42Z 
ISO 8601 Basic Date 20090123T105321Z
47
demandé sur gotqn 2009-05-02 00:55:33

5 réponses

Lorsque vous traitez des dates dans SQL Server, le format ISO-8601 est probablement la meilleure façon d'aller, car il fonctionne juste indépendamment de vos paramètres de langue et de culture.

Pour insérer des données dans une table SQL Server, vous n'avez pas besoin de codes de conversion ou quoi que ce soit du tout-spécifiez simplement vos dates en tant que chaînes littérales

INSERT INTO MyTable(DateColumn) VALUES('20090430 12:34:56.790')

Et vous avez terminé.

Si vous devez convertir une colonne de date au format ISO-8601 sur SELECT, vous pouvez utiliser le code de conversion 126 ou 127 (avec fuseau horaire information) pour atteindre le format ISO.

SELECT CONVERT(VARCHAR(33), DateColumn, 126) FROM MyTable

Devrait vous donner:

2009-04-30T12:34:56.790
77
répondu marc_s 2016-01-16 16:53:15

Ce

SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)

Produira ceci

2009-05-01T14:18:12.430

Et un peu plus de détails à ce sujet peuvent être trouvés à MSDN.

17
répondu Cyberherbalist 2009-05-01 21:21:01

Si vous avez juste besoin de sortir la date au format ISO8601, y compris le z final et que vous êtes sur au moins SQL Server 2012, vous pouvez utiliser FORMAT:

SELECT FORMAT(GetUtcDate(),'yyyy-MM-ddTHH:mm:ssZ')

Cela vous donnera quelque chose comme:

2016-02-18T21:34:14Z

6
répondu John P 2016-02-18 21:42:14

Mon Dieu, NON!!! Vous demandez un monde de mal si vous stockez des dates formatées dans SQL Server. Toujours stocker vos dates et heures et l'un des types de données SQL Server "date/heure" (DATETIME, DATE, TIME, DATETIME2, peu importe). Laissez le code frontal résoudre la méthode d'affichage et ne stocker que les dates formatées lorsque vous créez une table intermédiaire à partir de laquelle créer un fichier. Si vous devez absolument afficher les formats de date/heure ISO à partir de SQL Server, ne le faites qu'à l'heure d'affichage. Je ne peux pas souligner assez... ne stockez pas les dates/heures formatées dans SQL Server.

{Modifier}. Les raisons en sont nombreuses, mais les plus évidentes sont que, même avec un joli format ISO (qui est triable), tous les calculs et recherches de date future (recherche de toutes les lignes dans un mois donné, par exemple) nécessiteront au moins une conversion implicite (ce qui prend plus de temps) et si la date formatée stockée n'est pas le format dont vous vouloir.

La même chose est vraie pour le code frontal. Si vous stockez une date formatée (qui est du texte), il faut les mêmes girations pour afficher le format de date local défini par windows ou l'application.

Ma recommandation est de toujours stocker la date / heure en tant que DATETIME ou autre type de données temporel et de formater uniquement la date à l'heure d'affichage.

5
répondu Jeff Moden 2016-01-16 16:03:34

Vous avez techniquement deux options en parlant de dates ISO.

En général, si vous filtrez spécifiquement sur les valeursDate seules ou si vous cherchez à conserver la date de manière neutre. Microsoft recommande d'utiliser le format neutre de ymd ou y-m-d. Qui sont les deux formats ISO valides.

Notez que le formulaire '2007-02-12' n'est considéré que comme neutre pour les types de données DATE, DATETIME2 et DATETIMEOFFSET.

Pour cette raison, votre le pari le plus sûr est de persister/filter basé sur toujours netural ymd format.

Le code:

select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)
0
répondu pimbrouwers 2017-03-21 20:36:27