回答編集履歴

3

追記

2021/10/14 03:04

投稿

sazi
sazi

スコア25186

test CHANGED
@@ -21,3 +21,37 @@
21
21
 
22
22
 
23
23
  条件が**正規表現**でパターン化できるなら、[SIMILAR TO正規表現](https://www.postgresql.jp/document/13/html/functions-matching.html)を使うと記述は簡潔にはなりますが、インデックスには期待できません。
24
+
25
+
26
+
27
+ 追記
28
+
29
+ --
30
+
31
+ 以下の様にパターンを独立した集合のように扱うとメンテしやすくなります。
32
+
33
+ 条件がパラメータなら、with式で展開している部分を一時テーブルにする事でも対応できますね。
34
+
35
+ ```
36
+
37
+ with ptrn as (
38
+
39
+ select * from unnest(array[
40
+
41
+ '16%','17%','21%','27%','28%','33%','34%','36%','40%','41%','43%','45%','48%'
42
+
43
+ ,'50%','52%','53%','54%','55%','59%','61%','63%','67%','68%'
44
+
45
+ ,'70%','71%','72%','73%','74%','80%','81%','83%','85%','86%','87%','88%','89%'
46
+
47
+ ,'92%','93%','94%','97%'
48
+
49
+ ]::text[]) as w(val)
50
+
51
+ )
52
+
53
+ select * from df
54
+
55
+ where カラム名 like any(select val from ptrn)
56
+
57
+ ```

2

追記

2021/10/14 03:04

投稿

sazi
sazi

スコア25186

test CHANGED
@@ -1,4 +1,8 @@
1
1
  like演算子では1文字毎のor表現は可能ですが、2文字の組み合わせのor表現は出来ません。
2
+
3
+ 追記:他の方の回答のようにパターンを複数というのは可能ですね
4
+
5
+
2
6
 
3
7
  先頭2桁との比較であれば**in述語**が使用できます。
4
8
 

1

追記

2021/10/14 02:52

投稿

sazi
sazi

スコア25186

test CHANGED
@@ -1,3 +1,5 @@
1
+ like演算子では1文字毎のor表現は可能ですが、2文字の組み合わせのor表現は出来ません。
2
+
1
3
  先頭2桁との比較であれば**in述語**が使用できます。
2
4
 
3
5
  ```SQL
@@ -11,3 +13,7 @@
11
13
  ```
12
14
 
13
15
  但し、対象項目にインデックスが設定されている場合、likeの場合は前方一致でインデックスが使用されますが、先頭2桁との比較だと、式インデックスを追加しないとレスポンスは劣化します。
16
+
17
+
18
+
19
+ 条件が**正規表現**でパターン化できるなら、[SIMILAR TO正規表現](https://www.postgresql.jp/document/13/html/functions-matching.html)を使うと記述は簡潔にはなりますが、インデックスには期待できません。