2

このクエリを実行すると、

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 を使用しています。

4

1 に答える 1

1

バイナリ文字列は、バイトを表す 16 進数の文字ペアで構成されているため、文字数が奇数の場合は文字が残ります。

そう

01d1a33c677c0000 

01 d1 a3 3c 67 7c 00 00
于 2013-10-16T10:04:20.483 に答える