2016-08-30 9 views
3

列に800、805、888 ...(8パターンのテキストがあります)を含むデータを選択したいとします。sql、文字列を見つけるためのストラテジーには特定のテキストが含まれています

同じような文をそれぞれ8回使用する必要がありますか、それとも速い方法がありますか?検索項目の配列を持つ

SELECT * FROM caller, 

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

(PS私は、SQLクエリを使用して、別のテーブルを作成することは許されないのです。。)

+0

何一時テーブルについては?あなたはそれを作成できますか?または可変テーブルですか? –

+0

提供された回答に加えて、[特殊な拡張子とインデックスの種類](https://www.postgresql.org/docs/current/static/pgtrgm.html#AEN174603) – Abelisto

答えて

2

LIKEは数字用ではなく文字列用です。 idが実際には数字であると仮定すると、最初にLIKE条件を適用できるように文字列にキャストする必要があります。

しかし、あなたはそれを行うと、あなたはそのために、配列を使用することができます

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

ありがとう!この場合のidはvarchar型のデータです –

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) 

これは書くのが短くても実行は速くないと思います。

関連する問題