Question

SQLDW_USER on Mon, 26 Mar 2018 01:10:36


SQLDATAWAREHOUSE内であるテーブルの項目をハッシュ化(HASHBYTES)しました。

ハッシュ化の理由は会員IDなどの項目をセキュリティ上、秘匿するためです。

そのハッシュ化した値をSSMS(Microsoft SQL Server Management Studio)にて、

SQLで検索しようとしたところ、該当ハッシュ値のデータは存在するにもかかわらず、

クエリの結果が0件となりました。

正しく出力出来るようにどのような方法を取ればよいでしょうか?

構文例

SELECT TOP 1 KAIIN FROM TEST.TEST1

KAIIN

-------------------------------------------

0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62

SELECT TOP 1 KAIIN FROM TEST.TEST1
WHERE KAIIN='0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62'

KAIIN

-------------------------------------------

0

何らか文字列操作、変換関数などが必要なのでしょうか?

ご教示いただければ幸いです。


Sponsored



Replies

なちゃ on Mon, 26 Mar 2018 02:03:44


KAIIN列の型は文字列型にしてあるのでしょうか?

※varbinaryやbinaryなどではなく?

先頭の0xは普通16進数であることを示す接頭辞で、バイナリデータを表示しようとしたらこの形式の文字列に変換されているのではと思われます。

※そうでないと、登録時に0xこみで登録していることになるので(もしかしたら本当にそうなのかもしれませんが)

もしvarvainaryなどの型であれば、それを考慮した検索条件の指定が必要になると思いますが、その辺は知らないのでちょっとわかりません。

なちゃ on Mon, 26 Mar 2018 02:22:21


binaryなどの型で保存されている場合は、たとえば

SELECT TOP 1 KAIIN FROM TEST.TEST1
WHERE CONVERT(varchar(66), KAIIN, 1) = '0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62'

みたいな感じですかね(間違っているかもしれませんが)。

※バイナリ型で直比較できるようなら、変換を逆にした方がいいかもしれませんが


SQLDW_USER on Tue, 27 Mar 2018 09:19:42


ご返信ありがとうございます。

カラムの属性を確認するとvarvainaryになっていました。

該当項目を分散キーにしていることもあり、カラムの属性変更が出来ません。

CONVERT関数などで変換するとしたら、どのような構文になりますでしょうか?

リファレンスだけだとどうも分かりづらく、ご教示いただければ幸いです。


jzkey on Tue, 27 Mar 2018 13:42:02


varbinaryなら、とっても大きい整数、みたいな扱いなので、シングルクオートで囲う必要はないです。

つまり、次のようなクエリですね。
SELECT TOP 1 KAIIN FROM TEST.TEST1
WHERE KAIIN=0xB4E7954122BA6FC09D228CFE45EB10921E698AAB0970DFC2AF3585F401D92F62