2

我正在使用 SQL Server Management Studio 编写 SQL 查询,并且有一些 ISO 日期格式的 NVARCHAR 类型值(例如:)20130302T164800。我需要将它们转换为 DATETIME

我尝试了该Convert()功能,但它导致异常:

将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围

有没有办法我可以做到这一点?

4

1 回答 1

6

问题是您的字符串不是可接受的 SQL Server 日期时间格式。SQL Server 识别ISO8601格式,即:

yyyy-mm-ddThh:mi:ss.mmm

上面的日期是2013-03-02T16:48:00

请参阅日期和时间样式部分。

所以下面的语句会失败:

declare @date nvarchar(max) = '20130302T164800'

select convertedDate = cast(@date as datetime)

如果将字符串转换为ISO8601格式,则该语句将起作用:

declare @date nvarchar(max) = '2013-03-02T16:48:00'

select convertedDate = cast(@date as datetime)

SQL Fiddle 与演示

您可以将格式更新为 SQL Server 可识别的格式,并在一个语句中将字符串转换为日期时间:

declare @date nvarchar(max) = '20130302T164800'

select cast(left(@date, 4)
  + '-' + substring(@date,5,2)
  + '-' + substring(@date,7,5)
  + ':' + substring(@date,12,2)
  + ':' + substring(@date,14,2) as datetime)

SQL Fiddle 与演示

这只是一个示例,您可以将其转换为 SQL Server 识别的任何格式,但这会将其转换为ISO8601。基本上,将其转换为不同的格式以允许转换工作。

于 2013-03-29T11:04:29.213 回答