PostgreSQLで大文字小文字を無視して検索する

こんにちは、さるまりんです。

PostgreSQLで大文字小文字を無視して検索するにはILIKEを使います。

LIKEではないですよ。ILIKEです。

公式のドキュメントにはこうあります。

The key word ILIKE can be used instead of LIKE to make the match case-insensitive according to the active locale. This is not in the SQL standard but is a PostgreSQL extension.

(www.postgresql.org PostgreSQL 13 Documentation (英語版) の Functions and Operators – Pattern Matching より)

LIKEの代わりにILIKEを使うことでcase-insensitiveでマッチさせることができるとあります。case-insensitive、大文字小文字を区別しないということです。これはSQLの標準ではなくPostgreSQLのみの機能のようです。

SELECT [カラム1], ..., [カラムn]
 FROM [テーブル名]
 WHERE [カラム名] ILIKE '検索したい文字列'

実際に使ってみます。

salu=> select * from table_a where col ilike 'AAAA';
  col
-------
 aaaa
 Aaaa
 AAAA
 
(3 rows)

小文字でもやってみます。

salu=> select * from table_a where col ilike 'aaaa';
  col
-------
 aaaa
 Aaaa
 AAAA
 
(3 rows)

同じですね。

次はミックスです。

salu=> select * from table_a where col ilike 'aAAa';
  col
-------
 aaaa
 Aaaa
 AAAA
 
(3 rows)

そんなことなしでお願いしたいのですが、これまで小文字でもらっていたデータがある日急に「今日から大文字になったからよろしく」とか言われたら、これを思い出せるように残しておきます。

読んでくださってありがとうございます。

それではまた!