trim関数、ltrim関数、rtrim関数 の基本的な使い方
先頭と末尾の空白を削除(trim関数)SELECT trim(' 1234567890 ');
-- 結果 -> '1234567890'
先頭の空白を削除(ltrim関数)
SELECT ltrim(' 1234567890 ');
-- 結果 -> '1234567890 '
末尾の空白を削除(rtrim関数)
SELECT rtrim(' 1234567890 ');
-- 結果 -> ' 1234567890'
タブや全角文字は消えない
trim関数 は タブや全角文字 は削除しません。これらを削除したい場合は FROM 句を使用し、削除したい文字を指定します。次のサンプルコードは 文字列リテラル 'A 1234567890 B' の先頭と末尾にある 'A' と 'B' を削除します。
SELECT trim('AB' FROM 'A 1234567890 B');
-- 結果 -> ' 1234567890 '
次のサンプルコードは 文字列リテラル 'A 1234567890 B' の先頭と末尾にある '1' と ' ' と 'A' と 'B' を削除します。
SELECT trim('1 AB' FROM 'A 1234567890 B');
-- 結果 -> '234567890'
trim関数 の使用例
検索結果から文字列の空白を削除する
次のサンプルコードは テーブル user_table の 列 user_name の先頭と末尾の空白を削除した結果を表示します。SELECT *
,trim(user_name)
FROM user_table;
更新で使用
次のサンプルコードは 列 user_name の先頭と末尾の空白を削除し、更新します。UPDATE user_table
SET user_name = trim(user_name);
検索条件としての利用(非推奨)
trim関数を検索条件として使用すると、空白を取り除いて検索することができます。ただし、インデックスが効かないため、レコード件数が多い場合は処理に時間がかかる場合があります。次のサンプルコードは、テーブル user_table の列 user_name の前後にある空白を削除して 'example' に一致するレコードを抽出します。
SELECT user_name
FROM user_table
WHERE trim(user_name) = 'example';
並び替えで利用(非推奨)
ORDER BY 句で trim関数を使用すると、前後の空白を削除した結果の文字列の順にレコードを並べ替えることができます。 ただしインデックスが効かないため、レコード件数が多い場合は処理に時間がかかる場合があります。次のサンプルコードは 列 user_name の前後にある空白を削除した結果でソートをし、その結果を表示します。
SELECT *
FROM user_table
ORDER BY trim(user_name);
trim関数 使用時の注意
trim関数は null が引数として与えられた場合、空文字列ではなく null を返します。 空文字列を返したい場合は、COALESCE関数を使用して null を空文字列に置き換えます。次にCOALESCE関数を使用し、trim関数 の 結果が null の場合に 空文字列に置き換える例を示します。
SELECT COALESCE(trim(null), '');
参考資料
- PostgreSQL公式ドキュメント - 9.4. String Functions and Operators
- PostgreSQL公式ドキュメント - 9.5. Binary String Functions and Operators
- PostgreSQL公式ドキュメント - 9.18.2. COALESCE - 9.18. Conditional Expression
検証環境
- PostgreSQL 16.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 13.2.1_git20231014) 13.2.1 20231014, 64-bit
- pgAdmin 8.2
- Docker image: postgres:16-alpine
- Docker image: dpage/pgadmin4
- Docker Desktop 4.28.0 (139021)
- Docker Engine Engine: 25.0.3
- Docker Compose v2.24.6-desktop.1
- Windows 11 Enterprise Version 23H2 OS Build 22631.3447 Experience: Windows Feature Experience Pack 1000.22688.1000.0