sql - Postgres 上的差异字符串

标签 sql postgresql

我有两个包含 1 和 0 的字符串。我想确定有多少字符在同一位置不同。 例如:

“000011100000000000000000000000000000000000000000000000000000000” 和 “0000000000000001000011000011110000000000000000000000000000000000”

结果是:10

这些字符串的长度总是64;

我可以用遍历字符串并计算差异的循环来做到这一点。但我想用 reg exp 或其他工具来做。速度对我来说很重要。因为我有很多数据要比较。

最佳答案

将字符串转换为 bit(64) , 使用 bitwise XOR ,将结果转换为 text 并计算 1 个字符:

select length(replace(
    ( '0000111000000000000000000000000000000000000000000000000000000000'::bit(64)
    # '0000000000000010000110000111100000000000000000000000000000000000'::bit(64))::text,
    '0', ''))

 length 
--------
     10
(1 row)     

关于sql - Postgres 上的差异字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58357830/

相关文章:

sql - 如何用 row 编写 select max ?

mysql - 如何将 varchar 字段转换为 datetime 数据类型?

mysql - sql 如果存在则插入,如果不存在则插入

sql - 如何在 postgresql 动态 SQL 中引用变量?

sql - 将字段与占位符进行比较 - PostgreSQL

mysql - 如何查询每年的一系列日期?

sql - Rails/Ransack : eq_all array of ids

sql - 没有时区的时间戳的 Hibernate DST 日期映射问题

postgresql - 如何在带有 PostgreSQL 数据库的 Web 应用程序中拥有完整的离线功能?

PostgreSQL:转储和恢复