![](/img/trans.png)
[英]How to simulate the MySQL bit_count function in Sybase SQL Anywhere?
[英]Trouble doing a bitwise xor + bit_count in mysql
我正在嘗試對哈希值(16 個字符的十六進制字符串)進行比較。 我有一個 MYSQL 表,它使用phash VARCHAR(16)
列存儲這些值。 這就是我想要做的:
SELECT phash, bit_count(phash ^ x'dda15873a3de013d') FROM mytable;
但是 bit_count + xor 沒有正確完成。 即使對於phash='dda15873a3de013d'
我得到33
結果而我應該得到0
(兩個十六進制相同,所以異或應該只產生零,因此 bit_count 為 0。
怎么了? 謝謝
編輯:這里的例子=> 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 |
+------------------+-----------------------------------------------------+
CONV
返回一個字符串。 您需要將CONV
的結果CONV
為UNSIGNED
。
MySQL ^
運算符僅適用於整數。 它不能用於對字符串(或 blob)進行異或。
如果您的字符串專門表示十六進制整數,則可以在將它們轉換為整數后使用^
:
SELECT BIT_COUNT(CONV(phash, 16, 10) ^ 0xdda15873a3de013d)
SELECT BIT_COUNT(cast(CONV(phash, 16, 10) as unsigned) ^ 0xdda15873a3de013d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.