我正在使用SQL Server Management Studio编写SQL查询,并且ISO日期格式中有一些NVARCHAR类型值(例如:20130302T164800
)。我需要将它们转换为DATETIME
我尝试了Convert()
函数,但它会导致异常:
将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值
我有办法做到这一点吗?
答案 0 :(得分:6)
问题是您的字符串不是接受的SQL Server日期时间格式。 SQL Server识别 ISO8601 格式,即:
yyyy-mm-ddThh:mi:ss.mmm
上述日期为 2013-03-02T16:48:00 。
请参阅Date And Time Styles部分。
因此以下陈述将失败:
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 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 Server可识别的任何格式,但这会将其转换为 ISO8601 。基本上,将其转换为不同的格式以允许转换工作。