2017-10-27 2 views
0

Ich versuche, einige Daten aus einer Flat-Datei in SQL SERVER 2016 zu importieren. In der Flat-Datei gibt es Datumsdaten in ISO 8061 UTC-FormatWie konvertiert man ISO 8601 UTC-Zeit in das Datetime-Format in SQL Server 2016

eg: 2017-10-08T00:00:00.0000000Z 

Beim Erstellen der Tabelle in SQL-Server habe ich die Spalte als Datetime erstellt. Aber jetzt, wenn ich versuche, eine Auswahl auf dieser bestimmten Spalte zu tun, ist es zu werfen Fehler wie:

Expected data type: DATETIME NOT NULL, Offending value: 2017-10-08T00:00:00.0000000Z (Column Conversion Error), Error: Conversion failed when converting the NVARCHAR value '2017-10-08T00:00:00.0000000Z' to data type DATETIME. 

Gibt es trotzdem, dieses Problem zu beheben. Ich versuchte die folgende Aussage in SQL-Server:

SELECT convert(datetime, DateColumnISO, 127) FROM myTable; 

Dies wiederum warf den gleichen Fehler.

Danke, Arjun

+0

sollte nicht gewesen '2017-10-08T00: 00: 00.000Z' statt' 2017-10- 08T00: 00: 00.0000000Z'? – SmartDev

Antwort

2

Sie haben zu viel Präzision zu convert zu einem datetime. Entweder Streifen aller Vergangenheit Millisekunden oder convert zu einem datetime2:

select convert(datetime, '2017-10-08T00:00:00.000Z' ,127) as ConvertedToDateTime 
     ,convert(datetime2,'2017-10-08T00:00:00.0000000Z',127) as ConvertedToDateTime2 

Ausgang:

+-------------------------+------------------------------+ 
| ConvertedToDateTime |  ConvertedToDateTime2  | 
+-------------------------+------------------------------+ 
| 2017-10-08 00:00:00.000 | 2017-10-08 00:00:00.0000000 | 
+-------------------------+------------------------------+ 
+0

Ich bekomme korrekte Daten, wenn ich die obige Abfrage in SQL ausprobiere. Wenn ich jedoch die tatsächlichen Datumsangaben durch den Spaltennamen ersetze, wird der folgende Fehler ausgegeben: Spaltenordinalwert: 0, Erwarteter Datentyp: DATETIME NOT NULL, Fehlerwert: 2017-10-08T00: 00: 00.0000000Z (Spaltenkonvertierung Fehler), Fehler: Konvertierung fehlgeschlagen beim Konvertieren des NVARCHAR-Wertes '2017-10-08T00: 00: 00.0000000Z' in den Datentyp DATETIME. – Arjun

+1

Ja, weil Sie versuchen, einen Wert mit sehr hoher Genauigkeit in 'datetime' zu ​​konvertieren. Sie müssen Ihre Spalte in einen 'datetime2'-Wert ändern. – iamdave