PostgreSQL - 文字列の先頭と末尾にある空白を削除する

文字列の先頭と末尾の空白を削除するには、trim関数、ltrim関数、rtrim関数を使用します。これらの関数は、指定した文字列の前後にある空白を削除し、新しい文字列を返します。

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), '');

参考資料

検証環境