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

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

* 参考資料 [#ade08b67]
-MySQLのドキュメント~
[[MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.3 文字列関数>http://dev.mysql.com/doc/refman/5.1/ja/string-functions.html]]
* 関連記事 [#racb4f0a]
-[[PostgreSQLで文字列の不要なスペースをトリミングする・TRIM・LTRIM・RTRIM>PostgreSQL/文字列の不要なスペースをトリミングする・TRIM・LTRIM・RTRIM]]
-[[MySQLでダブルパイプを使用して文字連結をする方法>MySQL/MySQLでダブルパイプを使用して文字連結をする方法]]

* 環境および環境設定など [#l5eb6958]
使用したOSはCentOS6になります。~
MySQLのバージョンは以下のとおりです。
 mysql> select version();
 +-----------+
 | version() |
 +-----------+
 | 5.1.66    |
 +-----------+
 1 row in set (0.01 sec)

以下のSQLを実行し、データベースおよびテーブルを作成しデータを投入しました。~
 mysql> create database trimdb;
 Query OK, 1 row affected (0.00 sec)
 
 mysql> use trimdb
 Database changed
 mysql> create table trimtbl (c1 varchar(10));
 Query OK, 0 rows affected (0.09 sec)
 
 mysql> insert into trimtbl values(' hello '),('  world  ');
 Query OK, 2 rows affected (0.00 sec)
 Records: 2  Duplicates: 0  Warnings: 0
 
 mysql> select * from trimtbl;
 +-----------+
 | c1        |
 +-----------+
 |  hello    |
 |   world   |
 +-----------+
 2 rows in set (0.00 sec)

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

concat関数で$を末尾に連結しています。~
これは、LTRIM, RTRIMで末尾が削除されているかを確認するために$をカラムの値の後ろに連結しました。
 mysql> select concat(ltrim(c1),'$'), concat(rtrim(c1),'$') from trimtbl;
 +-----------------------+-----------------------+
 | concat(ltrim(c1),'$') | concat(rtrim(c1),'$') |
 +-----------------------+-----------------------+
 | hello $               |  hello$               |
 | world  $              |   world$              |
 +-----------------------+-----------------------+
 2 rows in set (0.00 sec)

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

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

** 引数指定なしでTRIMを実行する(前後のスペース削除) [#g586b729]
引数を指定しないでtrimを実行すると前後のスペースを削除します。
 mysql> select concat(trim(c1),'$'), concat(trim(c1),'$') from trimtbl;
 +----------------------+----------------------+
 | concat(trim(c1),'$') | concat(trim(c1),'$') |
 +----------------------+----------------------+
 | hello$               | hello$               |
 | world$               | world$               |
 +----------------------+----------------------+
 2 rows in set (0.00 sec)

trim(文字列)は、以下のように書くこともできます。
 select trim(both from カラム名) from テーブル名;
文字列を直に設定し実行することもできます。
 mysql> select trim(' HELLO WORLD ');
 +-----------------------+
 | trim(' HELLO WORLD ') |
 +-----------------------+
 | HELLO WORLD           |
 +-----------------------+
 1 row in set (0.00 sec)
 
 mysql> select trim(both from ' HELLO WORLD ');
 +---------------------------------+
 | trim(both from ' HELLO WORLD ') |
 +---------------------------------+
 | HELLO WORLD                     |
 +---------------------------------+
 1 row in set (0.00 sec)

** 引数指定を指定してみる [#db1f93e1]
上記ではBOTHを指定しました。~
以下では、LEADING, TRAILINGを使用した例を記します。
- LEADINGはLTRIMと同じ動作
 mysql> SELECT CONCAT(TRIM(LEADING FROM '  HELLO WORLD  '), '$');
 +---------------------------------------------------+
 | CONCAT(TRIM(LEADING FROM '  HELLO WORLD  '), '$') |
 +---------------------------------------------------+
 | HELLO WORLD  $                                    |
 +---------------------------------------------------+
 1 row in set (0.00 sec)

- TRAILINGはRTRIMと同じ動作
 mysql> SELECT CONCAT(TRIM(TRAILING FROM '  HELLO WORLD  '), '$');
 +----------------------------------------------------+
 | CONCAT(TRIM(TRAILING FROM '  HELLO WORLD  '), '$') |
 +----------------------------------------------------+
 |   HELLO WORLD$                                     |
 +----------------------------------------------------+
 1 row in set (0.00 sec)

** 文字列を指定しトリミングする [#x45c1ffa]
BOTH, LEADING, TRAILINGを使用し文字列を指定してトリミングしてみる
- BOTH
BOTHの場合は指定した文字列(abc)を先頭と末尾から削除します。~
以下の実行例はabcSAKURAabcがSAKURAになります。
 mysql> SELECT TRIM(BOTH 'abc' FROM 'abcSAKURAabc');
 +--------------------------------------+
 | TRIM(BOTH 'abc' FROM 'abcSAKURAabc') |
 +--------------------------------------+
 | SAKURA                               |
 +--------------------------------------+
 1 row in set (0.00 sec)

- LEADING
LEADINGの場合は指定した文字列(abc)を先頭(左側)から削除します。~
以下の実行例はabcSAKURAabcがSAKURAabcになります。
 mysql> SELECT TRIM(LEADING 'abc' FROM 'abcSAKURAabc');
 +-----------------------------------------+
 | TRIM(LEADING 'abc' FROM 'abcSAKURAabc') |
 +-----------------------------------------+
 | SAKURAabc                               |
 +-----------------------------------------+
 1 row in set (0.00 sec)

- TRAILING
TRAILINGの場合は指定した文字列(abc)を先頭(左側)から削除します。~
以下の実行例はabcSAKURAabcがabcSAKURAになります。
 mysql> SELECT TRIM(TRAILING 'abc' FROM 'abcSAKURAabc');
 +------------------------------------------+
 | TRIM(TRAILING 'abc' FROM 'abcSAKURAabc') |
 +------------------------------------------+
 | abcSAKURA                                |
 +------------------------------------------+
 1 row in set (0.00 sec)

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

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