#author("2017-05-10T13:07:13+09:00","","")
#author("2017-05-10T13:08:11+09:00","","")
#navi(../)

* PostgreSQLで大文字小文字を区別せずLIKEで検索する方法 [#wd0a6ab4]
PostgreSQLで文字列検索の時、英文字の小文字大文字を区別せずにSELECTする方法を以下に記します。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* LIKEではなく、''I''LIKEを使う [#q5c0effe]
以下のテーブルを作成し、INSERTによりデータを投入しました。

 CREATE TABLE t1 (
   no integer,
   keyword varchar(128)
 );

以下、実行時の出力です。
 sakuradb=> CREATE TABLE t1 (
 sakuradb(> no integer,
 sakuradb(> keyword varchar(128)
 sakuradb(> );
 CREATE TABLE
 sakuradb=>
 
 sakuradb=> INSERT INTO t1 VALUES (1,'hello'),(2,'HELLO'),(3,'HeLlO');
 INSERT 0 3
 
 sakuradb=> SELECT * FROM t1;
  no | keyword
 ----+---------
   1 | hello
   2 | HELLO
   3 | HeLlO
 (3 行)

* ILIKEを使用した時の出力 [#kfe93302]
 WHERE句でLIKEではなく、''I''LIKEで文字列検索を行うと、大文字小文字が区別され検索結果が表示されます。
WHERE句でLIKEではなく、&color(red){''I''};LIKEで文字列検索を行うと、大文字小文字が区別され検索結果が表示されます。
 
 sakuradb=> SELECT * FROM t1 WHERE keyword ILIKE '%LL%';
  no | keyword
 ----+---------
   1 | hello
   2 | HELLO
   3 | HeLlO
 (3 行)

 sakuradb=> SELECT * FROM t1 WHERE keyword ILIKE '%ll%';
  no | keyword
 ----+---------
   1 | hello
   2 | HELLO
   3 | HeLlO
 (3 行)

ちなみにLIKEでは、大文字小文字が区別されます。
 sakuradb=> SELECT * FROM t1 WHERE keyword LIKE '%ll%';
  no | keyword
 ----+---------
   1 | hello
 (1 行)
 
 sakuradb=> SELECT * FROM t1 WHERE keyword LIKE '%LL%';
  no | keyword
 ----+---------
   2 | HELLO
 (1 行)

以上、PostgreSQLで大文字小文字を判別せず検索には ''I''LIKE を使えば意図した動作になる実行例資料でした。

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS