如何在SQL Server 2016中将ISO 8601 utc时间转换为日期时间格式

时间:2017-10-27 09:56:58

标签: sql datetime sql-server-2016

我正在尝试将平面文件中的一些数据导入SQL SERVER 2016.在平面文件中,有一个ISO 8061 UTC格式的日期数据

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

在sql server中创建表时,我将列创建为datetime。但是现在当我尝试对这个特定列进行选择时,它会抛出错误:

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.

无论如何都要解决这个问题。我在SQL server中尝试了以下语句:

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

这又引发了同样的错误。

谢谢, 阿琼

1 个答案:

答案 0 :(得分:2)

convertdatetime的精确度太高了。要么删除所有过去几毫秒,要么将convert删除到datetime2

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

输出:

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