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%']);
我想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%']);