it-swarm.com.de

TSQL DATETIME ISO 8601

Mir wurde eine Spezifikation gegeben, die das ISO 8601-Datumsformat erfordert, kennt jemand die Konvertierungscodes oder eine Möglichkeit, diese 2 Beispiele zu erhalten:

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

Wenn Sie mit Datumsangaben in SQL Server arbeiten, ist das ISO-8601-Format wahrscheinlich der beste Weg, da es unabhängig von Ihren Sprach- und Kultureinstellungen funktioniert. 

Um Daten in eine SQL Server-Tabelle einzufügen, benötigen Sie keine Konvertierungscodes oder irgendetwas. Geben Sie einfach Ihre Datumsangaben als Literal-Zeichenfolgen an

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

und du bist fertig.

Wenn Sie unter SELECT eine Datumsspalte in das ISO-8601-Format konvertieren müssen, können Sie den Konvertierungscode 126 oder 127 (mit Zeitzoneninformationen) verwenden, um das ISO-Format zu erhalten.

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

sollte dir geben:

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

Diese

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

wird dies produzieren

2009-05-01T14:18:12.430

Weitere Einzelheiten hierzu finden Sie unter MSDN .

19
Cyberherbalist

Wenn Sie nur das Datum im ISO8601-Format einschließlich des abschließenden Z ausgeben müssen und mindestens SQL Server 2012 verwenden, können Sie FORMAT verwenden:

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

Dies gibt Ihnen etwas wie:

2016-02-18T21:34:14Z  

8
John P

Meine Güte, nein !!! Wenn Sie formatierte Datumsangaben in SQL Server speichern, bitten Sie um eine Welt voller Verletzungen. Speichern Sie immer Ihre Datums- und Zeitangaben und einen der Datentypen "Datum/Uhrzeit" (DATETIME, DATE, TIME, DATETIME2, wie auch immer) von SQL Server. Lassen Sie den Front-End-Code die Anzeigemethode auflösen und formatierte Datumsangaben nur speichern, wenn Sie eine Staging-Tabelle zum Erstellen einer Datei erstellen. Wenn Sie unbedingt ISO-Datums-/Zeitformate von SQL Server anzeigen müssen, tun Sie dies nur zur Anzeigezeit. Ich kann nicht genug betonen. Speichern Sie KEINE formatierten Daten in SQL Server.

{Bearbeiten}. Die Gründe dafür sind vielfältig, aber die naheliegendsten sind, dass selbst mit einem Nice ISO-Format (das sortierbar ist), alle zukünftigen Datumsberechnungen und Suchvorgänge (beispielsweise die Suche nach allen Zeilen in einem bestimmten Monat) zumindest implizit erfordern Konvertierung (was zusätzliche Zeit in Anspruch nimmt) und wenn das gespeicherte formatierte Datum nicht das Format ist, das Sie derzeit benötigen, müssen Sie es zuerst in ein Datum und dann in das gewünschte Format konvertieren.

Dasselbe gilt für den Front-End-Code. Wenn Sie ein formatiertes Datum (dh Text) speichern, sind für die Anzeige des von Windows oder der App definierten lokalen Datumsformats dieselben Schritte erforderlich. 

Meine Empfehlung ist, das Datum/die Uhrzeit immer als DATETIME oder einen anderen temporären Datentyp zu speichern und das Datum nur zur Anzeigezeit zu formatieren.

5
Jeff Moden

Sie haben technisch zwei Möglichkeiten, wenn Sie von ISO-Daten sprechen. 

Wenn Sie speziell nach Date Werten filtern OR, um das Datum auf neutrale Weise zu erhalten. Microsoft empfiehlt, das sprachneutrale Format von ymd oder y-m-d zu verwenden. Welches sind beide gültige ISO-Formate.

Beachten Sie, dass das Formular '2007-02-12' nur als sprachneutral gilt für die Datentypen DATE, DATETIME2 und DATETIMEOFFSET.

Aus diesem Grund besteht Ihre sicherste Wette darin, auf dem always netural ymd-Format zu persistieren/zu filtern.

Der Code:

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