本資料はMySQLで文字列の前後にある不要なスペースを削除する文字列関数TRIM, LTRIM, RTRIMについて記述します。
使用した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を使用してみます。
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関数は任意の文字列を削除することができます。
引数を指定しないで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)
上記ではBOTHを指定しました。
以下では、LEADING, TRAILINGを使用した例を記します。
mysql> SELECT CONCAT(TRIM(LEADING FROM ' HELLO WORLD '), '$'); +---------------------------------------------------+ | CONCAT(TRIM(LEADING FROM ' HELLO WORLD '), '$') | +---------------------------------------------------+ | HELLO WORLD $ | +---------------------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT CONCAT(TRIM(TRAILING FROM ' HELLO WORLD '), '$'); +----------------------------------------------------+ | CONCAT(TRIM(TRAILING FROM ' HELLO WORLD '), '$') | +----------------------------------------------------+ | HELLO WORLD$ | +----------------------------------------------------+ 1 row in set (0.00 sec)
BOTH, LEADING, TRAILINGを使用し文字列を指定してトリミングしてみる
mysql> SELECT TRIM(BOTH 'abc' FROM 'abcSAKURAabc'); +--------------------------------------+ | TRIM(BOTH 'abc' FROM 'abcSAKURAabc') | +--------------------------------------+ | SAKURA | +--------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT TRIM(LEADING 'abc' FROM 'abcSAKURAabc'); +-----------------------------------------+ | TRIM(LEADING 'abc' FROM 'abcSAKURAabc') | +-----------------------------------------+ | SAKURAabc | +-----------------------------------------+ 1 row in set (0.00 sec)
mysql> SELECT TRIM(TRAILING 'abc' FROM 'abcSAKURAabc'); +------------------------------------------+ | TRIM(TRAILING 'abc' FROM 'abcSAKURAabc') | +------------------------------------------+ | abcSAKURA | +------------------------------------------+ 1 row in set (0.00 sec)