5

varbinaryタイプとバイト配列を比較したい。私はこれまでに試しました:

DECLARE @data AS NVARCHAR(MAX)='4283'

Select * from table1 Where bindayData=CAST(@data AS VARBINARY)

しかし、これはうまくいきません。

これの1つの奇妙な動作に注意してください:静的に使用する場合

Select * from table1 Where bindayData=CAST('4283' AS VARBINARY)

その後、正常に動作します。しかし、変数を宣言すると機能しません。

あなたのアイデアを共有してください。

ありがとう、ナレシュ・ゴラダラ

4

2 に答える 2

10

試す

DECLARE @data AS NVARCHAR(MAX)='4283'

文字列定数'4283'は、CAST では非 Unicode であり、1 文字につき 1 バイトです。
これにより、4バイトのvarbinaryが得られます0x34323833

NVARCHAR(MAX) を使用すると、N'4283'1 文字あたり 2 バイトの Unicode 文字列に変更されます。
これにより、次のような 8 バイトの varbinary が得られます。 0x0034003200380033

于 2011-07-11T10:05:54.120 に答える
3

convert 関数でスタイル 2 を使用しても、最終結果は切り捨てられません。結果を非バイナリ結果に変換するために、本質的に「0x」プレフィックスを省略します。Microsoft のドキュメントを参照してください。下部に例があります: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15

Select * 
from table1 
Where convert(varchar(max),bindayData,2) like '%4283%'
于 2020-07-27T14:53:29.587 に答える