有没有一种方法可以表达AND并且与忽略匹配顺序类似?

时间:2019-08-15 13:46:41

标签: sql regex amazon-redshift

我有一个Redshift表列,其中包含1到许多主题标签(例如#a,#b等)。我想编写一个查询,查找给定集合中所有标签都存在的行(例如#a和#b),而不选择具有某些但不是全部标签的其他行(例如,仅#a或仅#b)

我可以看到如何使用多个LIKE语句(例如LIKE'%#a%'和LIKE'%#b%')来执行此操作,但我真的很想使用单个语句来执行此操作。我可以看到如何使用SIMILAR TO做到这一点,但不能忽略订购的方式。仅当我包括所有可能的订购组合时,以下内容才有效。

SELECT * FROM table WHERE field SIMILAR TO '(%#a%)(%#b%)|(%#b%)(%#a%)'

这可行,但是必须列出我要查找的所有标签组合,这会非常麻烦并且容易出错。有没有一种方法可以在Redshift中使用SIMLAR TO(或其他函数)来表达“ AND”而忽略顺序?

2 个答案:

答案 0 :(得分:1)

请确保在任何位置捕获整个标签,并且与不完整的标签不匹配:

SELECT *
FROM table
WHERE (field LIKE '#a#%' OR field LIKE '%#a') AND
      (field LIKE '#b#%' OR field LIKE '%#b')

这避免了匹配诸如#ac#b

之类的数据

答案 1 :(得分:0)

使用ANDLIKE

SELECT t.*
FROM table t
WHERE field LIKE '%#a%' AND
      field LIKE '%#b%';