MySQL 的 bit_count 函数在某些情况下非常有用:
http://dev.mysql.com/doc/refman/5.5/en/bit-functions.html#function_bit-count
现在我想在不支持它的其他数据库中使用该功能。最简单的方法是什么(无需创建存储函数,因为我无权访问 DDL 级别的客户端数据库)。
一个非常详细的选项是(对于 TINYINT
数据类型):
SELECT (my_field & 1) +
(my_field & 2) >> 1 +
(my_field & 4) >> 2 +
(my_field & 8) >> 3 +
(my_field & 16) >> 4 +
...
(my_field & 128) >> 7
FROM my_table
对于 Sybase SQL Anywhere,>>>
运算符似乎不可用,因此除以 2, 4, 8, 16
的效果如下好吧。
还有其他更简洁的选项吗?
最佳答案
我发现这个算法在 Java 的 Integer
和 Long
类中不太冗长。不过,我完全不知道为什么它应该以这种方式工作:
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
关于mysql - 如何在Sybase SQL Anywhere 中模拟MySQL 的bit_count 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946349/