sql,找出字符串包含特定文本的策略

sql, strategies to find out string contains certain texts

我想select列中包含800、805、888...(有8个模式文本)的任何数据。

我必须对每个语句使用 8 次 like 语句还是有更快的方法?

示例:

SELECT * FROM caller, 

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

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

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)

我认为这写起来更短但执行起来并不快。

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

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

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