我有一张这样的table
one | two | three | code | four
-----+-------+-------+---------+--------
0 | 21750 | 10110 | 1016916 | 20.0
0 | 21750 | 10111 | 1017949 | 20.2
0 | 21750 | 10115 | 101792 | 21.0
0 | 21737 | 10110 | 100753 | 20.0
0 | 21737 | 10110 | 14343054 | 20.0
我想提取字段code
至少包含以下子字符串之一的所有记录:
七九四四三十七
我该怎么做?
更新
我知道我可以通过写作来达到这个目的
select * from mytable where
code ilike '%794%' or
code ilike '%43%' or
code ilike '%17%';
但是想象在真实情况下,匹配子串以数组的形状(例如,('794', '43', '17')
),它的长度大于100,所以我不想把这个数组重写成100+ WHERE
个条件,每个条件对应于要在code
字段中搜索的每个子字符串。
我试过
select * from mytable where code && '{"794", "43", "17"}';
但它会抛出这个错误
提示:未找到具有给定名称和参数类型的运算符。您可能需要显式转换类型。
4条答案
按热度按时间gmol16391#
你可以在数组中使用unnest()作为输入,并使用正则表达式Map内容:
z18hc3ub2#
为了避免对每个子字符串重复where条件,您可以使用包含所有子字符串的cte,然后按以下方式与表进行联接:
demo
bxjv4tth3#
可以将SQL“LIKE”运算符与“OR”运算符结合使用,以提取“code”字段中包含任何指定子字符串的记录。在您的示例中:
要了解更多关于“LIKE”运算符的信息,我建议看一下这里的一些其他示例:SQL LIKE Operator
drkbr07n4#
您可以将
code
字段转换为文本,然后使用LIKE
:如果你有很多子字符串,并希望避免冗长的
WHERE
子句,那么将你的子字符串加载到一个合适的表中:然后使用以下与原始表的联接来查找匹配项: