【问题标题】:How to convert ISO 8601 utc time to datetime format in SQL server 2016如何在 SQL Server 2016 中将 ISO 8601 UTC 时间转换为日期时间格式
【发布时间】:2017-10-27 09:56:58
【问题描述】:

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

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

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

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;

这又抛出了同样的错误。

谢谢, 阿琼

【问题讨论】:

  • 不应该是2017-10-08T00:00:00.000Z 而不是2017-10-08T00:00:00.0000000Z

标签: sql datetime sql-server-2016


【解决方案1】:

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

【讨论】:

  • 在 SQL 中尝试上述查询时,我得到了正确的数据。但是,当我用列名替换实际日期数据时,它会引发以下错误:列序号:0,预期数据类型:DATETIME NOT NULL,违规值:2017-10-08T00:00:00.0000000Z(列转换错误) , 错误:将 NVARCHAR 值“2017-10-08T00:00:00.0000000Z”转换为数据类型 DATETIME 时转换失败。
  • 是的,因为您正试图将一个精度非常高的值转换为datetime。您需要将您的列更改为 datetime2 值。
猜你喜欢
  • 2023-03-15
  • 2013-01-30
  • 2012-04-29
  • 2020-11-23
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多