#navi(../)
* PostgreSQLで文字列の不要なスペースをトリミングする・TRIM・LTRIM・RTRIM [#obd09ce5]
本資料はPostgreSQLで文字列の前後にある不要なスペースを削除する文字列関数TRIM, LTRIM, RTRIMについて記述します。~

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

* 関連記事 [#k41241c7]
-[[MySQLで文字列の不要なスペースをトリミングする・TRIM・LTRIM・RTRIM>MySQL/文字列の不要なスペースをトリミングする・TRIM・LTRIM・RTRIM]]
-[[PostgreSQLでカラムの文字列を連結する・ダブルパイプ>PostgreSQL/PostgreSQLでカラムの文字列を連結する・ダブルパイプ]]
* 環境および環境設定など [#u5bf67d0]
使用したOSはCentOS6になります。~
PostgreSQLのバージョンは8.4.13です。

以下の操作でPostgreSQLに接続、SQLを実行しデータベースおよびテーブルを作成しデータを投入しました。~
 [root@centos6 ~]# su - postgres
 -bash-4.1$ createdb trimdb
 -bash-4.1$ psql trimdb
 psql (8.4.13)
 "help" でヘルプを表示します.
 
 trimdb=# create table trimtbl (c1 varchar(10));
 CREATE TABLE
 trimdb=# insert into trimtbl values(' hello '),('  world  ');
 INSERT 0 2
 trimdb=# SELECT * FROM trimtbl;
     c1
 -----------
   hello
    world
 (2 行)

* LTRIM, RTRIMを使ってみる。 [#lcfbdc66]
作成したテーブルを使用してLTRIM, RTRIMを使用してみます。

ダブルパイプで$を末尾に連結しています。~
これは、LTRIM, RTRIMで末尾が削除されているかを確認するために$をカラムの値の後ろに連結しました。
 
 trimdb=# SELECT LTRIM(c1) || '$' , RTRIM(c1) || '$' from trimtbl;
  ?column? | ?column?
 ----------+----------
  hello $  |  hello$
  world  $ |   world$
 (2 行)

上記結果によりLTRIMは左側のスペースを削除し、RTRIMは右側のスペースを削除するのが確認できます。

* TRIMを使ってみる [#qe9c697c]
TRIM関数は任意の文字列を削除することができます。

** 引数指定なしでTRIMを実行する(前後のスペース削除) [#b45db69e]
引数を指定しないでtrimを実行すると前後のスペースを削除します。
 trimdb=# SELECT '^' || TRIM(c1) || '$' from trimtbl;
  ?column?
 ----------
  ^hello$
  ^world$
 (2 行)

trim(文字列)は、以下のように書くこともできます。
 select trim(both from カラム名) from テーブル名;
文字列を直に設定し実行することもできます。
 trimdb=# SELECT '^' || TRIM(BOTH from ' SAKURA TSUBAKI ') || '$';
      ?column?
 ------------------
  ^SAKURA TSUBAKI$
 (1 行)

** 引数指定を指定してみる [#t25b7bd2]
上記ではBOTHを指定しました。~
以下では、LEADING, TRAILINGを使用した例を記します。
- LEADINGはLTRIMと同じ動作
 trimdb=# SELECT '^' || TRIM(LEADING from '  SAKURA TSUBAKI  ') || '$';
       ?column?
 --------------------
  ^SAKURA TSUBAKI  $
 (1 行)

- TRAILINGはRTRIMと同じ動作
 trimdb=# SELECT '^' || TRIM(TRAILING from '  SAKURA TSUBAKI  ') || '$';
       ?column?
 --------------------
  ^  SAKURA TSUBAKI$
 (1 行)

** 文字列を指定しトリミングする [#qc11d13f]
BOTH, LEADING, TRAILINGを使用し文字列を指定してトリミングしてみる
- BOTH
BOTHの場合は指定した文字列(abc)を先頭と末尾から削除します。~
以下の実行例はabcSAKURAabcがSAKURAになります。
 trimdb=# SELECT TRIM(BOTH 'abc' from 'abcSAKURAabc');
  btrim
 --------
  SAKURA
 (1 行)

- LEADING
LEADINGの場合は指定した文字列(abc)を先頭(左側)から削除します。~
以下の実行例はabcSAKURAabcがSAKURAabcになります。
 trimdb=# SELECT TRIM(LEADING 'abc' from 'abcSAKURAabc');
    ltrim
 -----------
  SAKURAabc
 (1 行)

- TRAILING
TRAILINGの場合は指定した文字列(abc)を先頭(左側)から削除します。~
以下の実行例はabcSAKURAabcがabcSAKURAになります。
 trimdb=# SELECT TRIM(TRAILING 'abc' from 'abcSAKURAabc');
    rtrim
 -----------
  abcSAKURA
 (1 行)

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

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