如何解决在Postgres中计算两个字符串之间的匹配单词吗?
我想根据两个字符串(不区分大小写)中匹配单词的数量对结果进行排序。有没有办法给两个字符串计数两个字符串中出现的匹配单词的数量?
示例:
"Red blue black green","Green Black Blue"
-> 3
"Blue Green","green blue"
-> 2
"Blue Green","Red blue"
-> 1
"green blue black","orange purple"
-> 0
我想在Order By子句中使用它。假定一个表中有一列带有字符串的列,我将查询该表,然后根据传入的字符串中具有最匹配单词的行对结果进行排序。
解决方法
您可以使用regexp_split_to_table()
将两个短语拆分成单词,然后计算匹配项。横向连接对此很方便。
select t.*,x.cnt_matches
from (values
('Red blue black green','Green Black Blue'),('Blue Green','green blue'),'red blue'),('green blue black','orange purple')
) as t(str1,str2)
cross join lateral (
select count(*) cnt_matches
from regexp_split_to_table(lower(t.str1),' ') w1(word)
inner join regexp_split_to_table(lower(t.str2),' ') w2(word)
on w1.word = w2.word
) x
str1 | str2 | cnt_matches :------------------- | :--------------- | ----------: Red blue black green | Green Black Blue | 3 Blue Green | green blue | 2 Blue Green | red blue | 1 green blue black | orange purple | 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。