我一直在网站上搜索一些指导,但找不到合适的东西。我想知道是否有一种方法可以选择“A 列中的字符串中的任何单词与 B 列中的字符串中的任何单词匹配”的行?我正在使用 postgresql。
ID | Name | Name_of_kin
1 | Peter Reeves | John Reeves
2 | Emily Sanchez | Roger James
3 | Rico van Der | Moses van Fel
4 | Monic | Monica
5 | Michaelangelo | Michael
在这种情况下,我想要选择 Name_of_kin
中的任何单词与 Name
中的任何单词匹配的行。我希望达到的结果是:
ID | Name | Name_of_kin
1 | Peter Reeves | John Reeves
3 | Rico van Der | Moses van Fel
提前非常感谢您!
最佳答案
您可以将每个字符串转换为一组单词并检查它们是否重叠:
select t.*
from mytable t
where string_to_array(t.name, ' ') && string_to_array(t.name_of_kin, ' ')
<强> Demo on DB Fiddle :
id | name | name_of_kin -: | :----------- | :------------ 1 | Peter Reeves | John Reeves 3 | Rico van Der | Moses van Fel
In Snowflake, you would write this as:
select t.*
from mytable t
where array_overlap(split(t.name, ' '), split(t.name_of_kin, ' '))
关于sql - 选择 A 列字符串中的任何单词与 B 列字符串中的任何单词匹配的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61339793/