Domanda TSQL DATETIME ISO 8601


Mi è stata data una specifica che richiede il ISO 8601 formato data, qualcuno conosce i codici di conversione o un modo per ottenere questi 2 esempi:

ISO 8601 Extended Date 2000-01-14T13:42Z 
ISO 8601 Basic Date 20090123T105321Z

44
2018-05-01 20:55


origine


risposte:


Quando si ha a che fare con date in SQL Server, il formato ISO-8601 è probabilmente il modo migliore per andare, poiché funziona solo indipendentemente dalle impostazioni di lingua e cultura.

Per INSERIRE i dati in una tabella di SQL Server, non è necessario alcun codice di conversione o nulla - basta specificare le date come stringhe letterali

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

e hai finito.

Se è necessario convertire una colonna di date in formato ISO-8601 su SELECT, è possibile utilizzare il codice di conversione 126 o 127 (con informazioni sul fuso orario) per ottenere il formato ISO.

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

dovresti darti:

2009-04-30T12:34:56.790

76
2018-05-01 21:00



Questo

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

produrrà questo

2009-05-01T14:18:12.430

E qualche altro dettaglio su questo può essere trovato a MSDN.


15
2018-05-01 21:21



Se hai solo bisogno di stampare la data nel formato ISO8601 includendo la Z finale e sei almeno su SQL Server 2012, allora puoi usare FORMAT:

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

Questo ti darà qualcosa come:

2016-02-18T21:34:14Z  


6
2018-02-18 21:42



Accidenti, NO !!! Stai chiedendo un mondo di dolore se memorizzi le date formattate in SQL Server. Memorizza sempre le date e gli orari e uno dei tipi di dati "Data / Ora" di SQL Server (DATETIME, DATA, ORA, DATETIME2, qualunque sia). Lascia che il codice di front-end risolva il metodo di visualizzazione e memorizzi solo date formattate quando stai costruendo una tabella di staging per creare un file da. Se è assolutamente necessario visualizzare i formati di data / ora ISO da SQL Server, eseguirlo solo in fase di visualizzazione. Non posso sottolineare abbastanza ... NON memorizzare date / orari formattati in SQL Server.

{Modificare}. Le ragioni sono molte ma le più ovvie sono che, anche con un bel formato ISO (che è ordinabile), tutti i calcoli e le ricerche delle date future (per cercare tutte le righe in un dato mese, ad esempio) richiederanno almeno un implicito conversione (che richiede più tempo) e se la data formattata memorizzata non è il formato che ti serve attualmente, dovrai prima convertirla in una data e poi nel formato che desideri.

Lo stesso vale per il front end. Se si memorizza una data formattata (che è testo), richiede le stesse rotazioni per visualizzare il formato di data locale definito da Windows o dall'app.

La mia raccomandazione è di memorizzare sempre data / ora come DATETIME o altri tipi di dati temporali e formattare solo la data al momento della visualizzazione.


5
2018-04-16 00:17



Tecnicamente hai due opzioni quando parli di date ISO.

In generale, se stai filtrando in modo specifico Data solo valori O cercando di mantenere la data in modo neutrale. Microsoft consiglia di utilizzare il formato di lingua neutra di ymd o y-m-d. Quali sono entrambi i formati ISO validi.

Si noti che il modulo "2007-02-12" è considerato solo linguaggi neutri   per i tipi di dati DATE, DATETIME2 e DATETIMEOFFSET.

Per questo motivo, la tua scommessa più sicura è quella di persistere / filtrare in base a sempre netural  ymd formato.

Il codice:

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

0
2018-03-21 13:40