web-dev-qa-db-fra.com

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
49
MartGriff

Lorsque vous traitez avec des dates dans SQL Server, le format ISO-8601 est probablement la meilleure voie à suivre, car il fonctionne simplement quels que soient vos paramètres de langue et de culture. 

Pour INSÉRER des données dans une table SQL Server, vous n'avez besoin d'aucun code de conversion ni de quoi que ce soit, il vous suffit de spécifier vos dates sous forme de chaînes littérales.

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

et tu as fini.

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 les informations de fuseau horaire) pour obtenir le format ISO.

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

devrait vous donner:

2009-04-30T12:34:56.790
79
marc_s

Ce

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

produira cette

2009-05-01T14:18:12.430

Et vous trouverez plus de détails à ce sujet sur MSDN .

19
Cyberherbalist

Si vous devez simplement afficher la date au format ISO8601, y compris le dernier Z et que vous utilisez 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  

8
John P

Gosh, NON !!! Vous demandez un monde de blessures si vous stockez des dates formatées dans SQL Server. Enregistrez toujours vos dates et heures et l’un des types de données "date/heure" de SQL Server (DATETIME, DATE, HEURE, DATETIME2, peu importe). Laissez le code frontal résoudre la méthode d'affichage et stockez uniquement les dates formatées lorsque vous créez un tableau intermédiaire à partir duquel créer un fichier. Si vous devez absolument afficher les formats de date/heure ISO à partir de SQL Server, ne le faites qu'au moment de l'affichage. Je ne saurais trop en dire autant ... 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 format ISO de Nice (qui peut être trié), tous les calculs et recherches de dates futures (par exemple, la recherche de toutes les lignes dans un mois donné) nécessiteront au moins un processus implicite. conversion (qui prend du temps supplémentaire) et si la date formatée stockée n’est pas le format dont vous avez besoin actuellement, vous devrez d’abord la convertir en une date, puis au format de votre choix.

Il en va de même pour le code frontal. Si vous stockez une date formatée (sous forme de texte), les mêmes girations sont nécessaires pour afficher le format de date local défini par Windows ou par l'application. 

Ma recommandation est de toujours stocker la date et l'heure sous forme de DATETIME ou d'un autre type de données temporel et de ne formater la date qu'à l'affichage.

5
Jeff Moden

Techniquement, vous avez deux options lorsque vous parlez de dates ISO. 

En général, si vous filtrez spécifiquement sur Date valeurs seules OR cherchent à conserver la date de manière neutre. Microsoft vous recommande d’utiliser le format indépendant de la langue ymd ou y-m-d. Quels sont les deux formats ISO valides.

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

Pour cette raison, votre meilleur pari est de conserver/filtrer en fonction du format always netural ymd.

Le code:

select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)
0
pimbrouwers