sql - 选择 A 列字符串中的任何单词与 B 列字符串中的任何单词匹配的位置

标签 sql string postgresql where-clause

我一直在网站上搜索一些指导,但找不到合适的东西。我想知道是否有一种方法可以选择“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/

相关文章:

python - 如何将 Python UUID 转换为字符串?

sql - 如何提取去极端化的常见行为?

java - ResultSet.getArray(colName) 可以返回 null 吗?

hibernate - hibernate4-maven-plugin 生成 PostgreSQL 模式的正确配置是什么?

mysql - 使用 where 子句从另一个表中选择数据

sql - BULK INSERT 后特殊字符显示不正确

c# - 如何将这 4 个 SQL 表转换为 OO 类(Java 或 C#),但不使用 NHibernate/LINQ?

c++ - 在 C++ 中,如何从字符串(或字符数组)中提取子字符串并将其写入字符串而不收到警告?

sql - 检索自上次记录以来的秒数

python - 拉取包含字符串的列的部分并创建字典,可以根据公共(public)键拉取值