sql,找出字符串的策略包含某些文本

时间:2016-08-30 08:07:08

标签: sql postgresql sql-like

我想在列中选择包含800,805,888 ...(有8种模式文本)的任何数据。

我是否必须为每一个使用8次相似的声明,还是有更快的方式?

示例:

SELECT * FROM caller, 

WHERE id LIKE '%805%' OR id LIKE'%800' OR ... ;

(PS。我不允许创建另一个表,只使用sql查询。)

2 个答案:

答案 0 :(得分:2)

LIKE用于字符串,不用于数字。假设id实际上是一个数字,首先需要将其强制转换为字符串,以便能够在其上应用LIKE条件。

但是一旦你这样做,就可以使用一个数组:

SELECT * 
FROM caller 
WHERE id::text LIKE ANY (array['%805%', '%800', '81%']);

答案 1 :(得分:1)

any()与搜索项目数组一起使用:

with test(id, col) as (
values
    (1, 'x800'),
    (2, 'x855'),
    (3, 'x900'),
    (4, 'x920')
    )
select *
from test
where col like any(array['%800', '%855'])

 id | col  
----+------
  1 | x800
  2 | x855
(2 rows)

写入时间较短但执行速度不快。