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

如何在SQL server 2016中将ISO 8601 utc时间转换为日期时间格式,sql,datetime,sql-server-2016,Sql,Datetime,Sql Server 2016,我正在尝试将一些数据从平面文件导入SQL SERVER 2016。在平面文件中,有一个ISO 8061 UTC格式的日期数据 eg: 2017-10-08T00:00:00.0000000Z 在SQLServer中创建表时,我将列创建为datetime。但现在,当我尝试在这个特定列上执行select时,抛出的错误如下: Expected data type: DATETIME NOT NULL, Offending value: 2017-10-08T00:00:00.0000000Z (C

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

eg: 2017-10-08T00:00:00.0000000Z
在SQLServer中创建表时,我将列创建为datetime。但现在,当我尝试在这个特定列上执行select时,抛出的错误如下:

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;
这又抛出了同样的错误

谢谢,
Arjun

您的精确度太高,无法将
转换为
日期时间。去掉超过毫秒的所有内容或将
转换为
日期时间2

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  |
+-------------------------+------------------------------+

应该不是
2017-10-08T00:00:00.000Z
而不是
2017-10-08T00:00:00.0000000 Z
?我在SQL中尝试上述查询时获得了正确的数据。但是,当我用列名替换实际日期数据时,它抛出以下错误:列序号:0,预期的数据类型:DATETIME NOT NULL,有问题的值:2017-10-08T00:00:00.0000000Z(列转换错误),错误:将NVARCHAR值“2017-10-08T00:00:00.0000000 Z”转换为数据类型DATETIME时,转换失败。是的,因为您正在尝试将精度非常高的值转换为
DATETIME
。您需要将列更改为
datetime2
值。