如何将一堆用逗号分隔的字符串与Postgres中的无序字符串输入进行比较

Posted

技术标签:

【中文标题】如何将一堆用逗号分隔的字符串与Postgres中的无序字符串输入进行比较【英文标题】:How to compare a bunch of strings separated by coma with unorder string input in Postgres 【发布时间】:2018-12-06 06:45:45 【问题描述】:
catalog
----------------------------------
id   title     keywords
----------------------------------
1    Title-1   k2,k1,k3,k4,k5
2    Title-2   k1,k3,k5,k6

如何通过比较关键字与我的输入k1,k2,k5来选择行

在上面的例子中,id 为 1 的行必须出现。

【问题讨论】:

【参考方案1】:

我会将keywords 列和输入都转换为数组,然后使用@> 运算符检查前者是否包含后者:

SELECT *
FROM   catalog
WHERE  STRING_TO_ARRAY(keywords, ',') @> STRING_TO_ARRAY('k1,k2,k5', ',')

DBFiddle

【讨论】:

这种是两个数组的交集吗? @Hearaman 不完全是。 @> 运算符表示“左侧参数是否包含右侧参数的所有元素。还有一个 && 运算符表示“两个参数之间是否有任何交集”,但这会返回两行,这它们和您提供的参数都包含“k1”。

以上是关于如何将一堆用逗号分隔的字符串与Postgres中的无序字符串输入进行比较的主要内容,如果未能解决你的问题,请参考以下文章

删除逗号,它是 R 中的千位分隔符

将一张excel表中的数据全部粘贴到txt文本文件中,如何做

使用 SQL Server 将逗号分隔的文本转换为多列结果

将一列拆分为多行

从 CSV 文件(逗号分隔)创建 postgres 外部表,该文件有一个电子邮件列,其中多个电子邮件地址用逗号分隔

使用 SSIS OR T-SQL 将一列带引号和不带引号的逗号分隔值拆分为多列