如何在SQL server 2016中将ISO 8601 utc时间转换为日期时间格式
我正在尝试将一些数据从平面文件导入SQL SERVER 2016。在平面文件中,有一个ISO 8061 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
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
值。