当我运行这个查询时,
declare @var nvarchar(448) = '0x1d1a33c677c0000';
select CAST(DATEADD(mi, (CAST(CONVERT(varbinary(max),@var, 1) as bigint) / 600000000), CAST('1/1/1601' AS DATETIME2)) as DATETIME2)
它给出了以下错误:
消息 8114,级别 16,状态 5,第 2
行将数据类型 nvarchar 转换为 varbinary 时出错。
但是,如果我通过填充额外的零将 nvarchar 更改为 18 个字符长的字符串,则查询可以正常工作。
样本:
declare @var nvarchar(448) = '0x01d1a33c677c0000';
select CAST(DATEADD(mi, (CAST(CONVERT(varbinary(max),@var, 1) as bigint) / 600000000), CAST('1/1/1601' AS DATETIME2)) as DATETIME2)
结果:
2016-05-01 00:00:00.0000000
虽然我通过使用 STUFF 语句绕过了这一点。但我想了解这种行为?
我正在使用 SQL Server 2008。