Postgres上的差异字符串

Mir*_*yev 0 sql postgresql

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

“ 0000111000000000000000000000000000000000000000000000000000000000000000000000”和“ 0000000000000010000110000111100000000000000000000000000000000000000000”

其结果是:10

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

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

kli*_*lin 5

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

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

 length 
--------
     10
(1 row)     
Run Code Online (Sandbox Code Playgroud)