得到mysql

时间:2016-03-13 22:36:24

标签: mysql

是否可以创建一个select查询来计算mysql中位操作的前导零数?我需要将其与阈值进行比较并返回结果。 Select-Query会经常被调用,但我认为每个基于SQL的解决方案都比我们当前将所有内容加载到内存然后在java中执行的策略更好。

功能示例:

unsigned INT with the value 1 -> 31, since there 32 bits and the rightmost is set unsigned INT with the value 0x0C000000 -> 4, there are 4 zero bits from the highest order to the first set

然后我可以将结果与阈值进行比较,只获得高于阈值的值。

伪代码示例查询:

SELECT *
FROM data
WHERE numberOfLeadingZeros(data.data XOR parameter) >= threshold;

2 个答案:

答案 0 :(得分:1)

您可以忽略零的计数,只需与阈值进行比较即可。例如,您知道32位值2中有多少前导0。任何少于0的东西都是>2,任何多于0的东西都是<2

因此,对于您的解决方案,不要执行查询number_of_zeros(x) >= threshold,而是查询x < value_with_threshold_leading_zeros。 (值为2^(31-number_of_zeros)

答案 1 :(得分:1)

这应该有用,但请看看@viraptor的建议:

SELECT * FROM data WHERE (32 - LENGTH(BIN(data))) >= threshold

这只是将整数转换为不带前导零的二进制字符串。因此,如果从32中减去此字符串的长度,则会得到数字中前导零的数量。

小提琴:http://sqlfiddle.com/#!9/e56c31/2