您可以使用 将两个短语拆分为单词regexp_split_to_table()
,然后计算匹配项。横向连接对此很方便。
select t.*, x.cnt_matches
from (values
('Red blue black green', 'Green Black Blue'),
('Blue Green', 'green blue'),
('Blue Green', '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
DB Fiddle 上的演示:
str1 | str2 | cnt_matches
:-------------------- | :--------------- | ----------:
红蓝黑绿| 绿色 黑色 蓝色 | 3
蓝绿 | 绿蓝| 2
蓝绿 | 红蓝| 1
绿蓝黑| 橙紫| 0