我正在使用 SQL Server Management Studio 编写 SQL 查询,并且有一些 ISO 日期格式的 NVARCHAR 类型值(例如:)20130302T164800
。我需要将它们转换为 DATETIME
我尝试了该Convert()
功能,但它导致异常:
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围
有没有办法我可以做到这一点?
我正在使用 SQL Server Management Studio 编写 SQL 查询,并且有一些 ISO 日期格式的 NVARCHAR 类型值(例如:)20130302T164800
。我需要将它们转换为 DATETIME
我尝试了该Convert()
功能,但它导致异常:
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围
有没有办法我可以做到这一点?
问题是您的字符串不是可接受的 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 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。基本上,将其转换为不同的格式以允许转换工作。