【问题标题】:How to check if any string in array contains any other string (substring) in other array? (PostgreSQL)如何检查数组中的任何字符串是否包含其他数组中的任何其他字符串(子字符串)? (PostgreSQL)
【发布时间】:2020-06-01 02:37:10
【问题描述】:

我有 2 个字符串数组,我想比较第一个数组的任何字符串是否包含来自另一个数组的 SUBstring,它存储这些 SUBstrings。

换句话说:我不想完全比较这些数组和它们的字符串,我需要准确地找出一个数组中的字符串是否包含另一个数组的子字符串。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 好吧,我发现了如何从数组中找到一个子字符串,但不知道如何在一个 SELECT 命令中使用 2 个数组。
  • SELECT * FROM table WHERE array_to_string(Array1, ',') LIKE ANY(Array2) - 没有输出... SELECT * FROM table WHERE POSITION(array_to_string(Array, ',') IN ANY (Array2) - 这是一个语法错误。
  • @zerocentaur 。 . .请提供样本数据和期望的结果。

标签: sql arrays string postgresql substring


【解决方案1】:

如果两个数组不太大,可以使用以下方法:

SELECT * FROM
    (SELECT unnest('{apple pie,sugar,brown sugar}'::varchar[]) a1) t1,
    (SELECT unnest('{pie,sugar}'::varchar[]) a2) t2
    where t1.a1 like ('%' || t2.a2 || '%')

否则我建议你使用 ts_vectors 和全文搜索运算符:https://www.postgresql.org/docs/current/textsearch.html

【讨论】:

  • 这是一个很好的例子,而且效果很好!但是如果第一个数组是一列呢? ``` SELECT * FROM (SELECT unnest(MyColumn) a1) t1, (SELECT unnest('{"Smth1","Smth2"}'::text[]) a2) t2 WHERE t1.a1 like ('%' | | t2.a2 || '%') ``` 抛出“表不存在”。
  • 在这里找到一个工作示例:sqlfiddle.com/#!17/97cd1/1
  • 非常感谢先生!最后我做了我想做的事!我想提升你的代表,但很遗憾我做不到。
猜你喜欢
  • 1970-01-01
  • 2015-09-08
  • 2012-04-30
  • 1970-01-01
  • 2020-12-01
  • 2018-08-27
  • 2011-12-23
  • 1970-01-01
相关资源
最近更新 更多