2016-04-17 2 views
0

ハッシュ値(16文字の16進文字列)の比較を実行しようとしています。私はphash VARCHAR(16)列でこれらの値を格納するMYSQLテーブルがあります。 これは私が何をしようとしていますものです:mysqlでbitwise xor + bit_countを処理するのに問題があります

SELECT phash, bit_count(phash^x'dda15873a3de013d') FROM mytable; 

しかしbit_count + XORが正しく行われていません。私はそれゆえ0 XORがゼロのみをもたらす必要がありますので、(2進が同じである、0

間違っている何

のbit_countを取得する必要があり、一方でさえphash='dda15873a3de013d'のために私は、結果として33を得る?

ありがとう

編集:ここ 例=>http://sqlfiddle.com/#!9/d7f5c2/1/0

mysql> SELECT phash,BIT_COUNT(CONV(phash, 16, 10)^0xdda15873a3de012d) from mytable limit 1; 

+------------------+-----------------------------------------------------+ 
| phash   | BIT_COUNT(CONV(phash, 16, 10)^0xdda15873a3de012d) | 
+------------------+-----------------------------------------------------+ 
| dda15873a3de012d |             33 | 
+------------------+-----------------------------------------------------+ 
+0

私のための作品:http://sqlfiddle.com/#!9/9eecb7d/54806 'phash'にはどのようなデータ型がありますか? –

+0

It's VARCHAR(16) – David

+0

http://sqlfiddle.com/#!9/d7f5c2/1/0を参照してください。 – David

答えて

0

MySQLの^オペレータは整数のみで動作しますこれは、XOR文字列(または塊)に使用することはできませんお互いに

あなたの文字列が、具体的整数を表す場合は、整数に変換した後、^を使用することができます。

SELECT BIT_COUNT(CONV(phash, 16, 10)^0xdda15873a3de013d) 
+0

残念ながら、私はまだ0の代わりに33を取得しています。私は私の質問を編集して、このクエリ(コメントよりも読みやすい)の結果を表示しました – David

+0

http://sqlfiddle.com/#!9/d7f5c2を参照してください/ 8/0(ごめんなさい) – David

0

文字列を返しますCONVCONVの結果をUNSIGNEDにキャストする必要があります。

関連する問題