mysql - 如何在Sybase SQL Anywhere 中模拟MySQL 的bit_count 函数?

标签 mysql bit-manipulation sqlanywhere bitcount

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 的 IntegerLong 类中不太冗长。不过,我完全不知道为什么它应该以这种方式工作:

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/

相关文章:

c - 有没有更有效的方法将 char 扩展为 uint64_t?

sql - 使用 SQL Anywhere 创建 .db 文件 - 现在使用 RazorSQL 查询它

mysql - MySQL中的一对一关系和级联删除

mysql - 更新具有匹配模式的多列的表

java - 这个在 Java 中使用 long 的位的紧凑型 boolean 数组有什么问题?

python - 如何在python中将位数组转换为整数

sql - Getdate(),-1天

mysql - 为基于 ODBC 的客户端设置 TLS 加密

php - 如何自动填充文本框取决于从下拉列表中选择选项

phpMyAdmin 错误 #1649 未知语言环境