SQLのtrim関数についてまとめています。
SQLのtrim関数の構文
trim関数は、文字列から余分な空白などを削除するための関数です。
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM([remstr FROM] str)
上記はMySQLのtrim関数の構文です。指定した文字列の前後から、指定した文字(remstr デフォルトでは空白)を削除します。なお、LEADINGを指定した場合には前方の空白のみ、TRAILINGを指定した場合には後方の空白のみ削除します。BOTHを指定すると何も指定しないデフォルト時の同じく、文字列の前後両方から余分な空白を削除します。
【関連記事】
▶【SQL】文字列からスペース(空白)を削除するには?過去と現在、二通りの方法について解説
なお、MySQLには文字列の左側の空白を削除するltrim()と右画の空白を削除するrtrimという関数が用意されています。
trimを使って、「空白または、空文字または、NULL」の行を抽出することが可能です。以下のSQLは、employees_copy(社員テーブルのコピー)から、first_name(姓名の名)が空白または空文字またはNULLのレコードを抽出する例です。2つ以上の連続した空白も抽出の対象になっています。
mysql> select * from employees_copy where trim(first_name) = '' or trim(first_name) IS NULL; +--------+------------+------------+-----------+--------+------------+ | emp_no | birth_date | first_name | last_name | gender | hire_date | +--------+------------+------------+-----------+--------+------------+ | 10001 | 1953-09-02 | | Facello | M | 1986-06-26 | | 10002 | 1964-06-02 | | Simmel | F | 1985-11-21 | | 10003 | 1959-12-03 | | Bamford | M | 1986-08-28 | | 10005 | 1955-01-21 | NULL | Maliniak | M | 1989-09-12 | +--------+------------+------------+-----------+--------+------------+ 4 rows in set (0.19 sec)
【関連記事】
▶SQLの空白判定のサンプルコード 連続した空白を判定する方法
trim関数で全角空白を削除する方法
全角空白を削除するには、削除対象文字列に全角空白を指定することで可能です。
select concat("#",trim(" " from " aaa "), "#"); concat("#",trim(" " from " aaa "), "#") #aaa#
しかし、これでは半角空白と全角空白が混在していた場合に半角空白が残ってしまう可能性があります。
replace関数を使って、全角空白を半角空白に変換してからtrim関数を使用することで、全角と半角空白両方を削除することが可能です。
select concat("#",trim(replace(" aaa "," "," ")), "#"); concat("#",trim(replace(" aaa "," "," ")), "#") #aaa#
Oracleのtrim関数の構文
TRIM([ { { LEADING | TRAILING | BOTH } [ trim_character ] | trim_character } FROM ] trim_source )
OracleのTRIMは、trim_characterに文字を指定すると削除する文字を指定可能です。デフォルトでは、空白文字が削除対象になります。OracleにもMySQLと同じく、LTRIM、RTRIMが用意されています。
以下の例は、hire_date(日付)の先頭の「0」を削除するSQLです。
SELECT employee_id, TO_CHAR(TRIM(LEADING 0 FROM hire_date)) FROM employees WHERE department_id = 60 ORDER BY employee_id; EMPLOYEE_ID TO_CHAR(T ----------- --------- 103 20-MAY-08 104 21-MAY-07 105 25-JUN-05 106 5-FEB-06 107 7-FEB-07
SQL Serverのtrim関数の構文
-- Syntax for SQL Server and Azure SQL Database TRIM ( [ characters FROM ] string )
関連)TRIM (Transact-SQL) – SQL Server | Microsoft Docs
SQL ServerのTRIM関数はシンプルです。指定した文字列の前後から特定の文字(デフォルトでは空白)を削除します。
SELECT TRIM( ' test ') AS Result; test SELECT TRIM( '.,! ' FROM ' # test .') AS Result; # test
SQL ServerのTRIM関数には、前方のみ、後方のみを指定するオプションはありませんが、LTRIM(前方のみ空白削除)とRTRIM(後方のみ空白削除)が用意されています。
PostgreSQLのtrim関数の構文
trim([leading | trailing | both] [characters] from string)
PostgreSQLのTRIM関数は、指定した文字(デフォルトでは空白)を削除します。leading、trailing、both指定で文字列の前方、後方または両方から削除します。以下の例は、xTomxxの前方・後方からxを削除する例です。
select trim(both 'x' from 'xTomxx'); btrim ----- Tom
PostgreSQLには、trimのほかに、btrim(前後両方から削除)、ltrim(前方のみ削除)、rtrim(後方のみ削除)の3種類の関数が用意されています。
select btrim(''xyxtrimyyx, 'xy'); btrim ----- trim select ltrim('zzzytrim', 'xyz') ; ltrim ----- trim select rtrim('trimxxxx', 'x'); rtrim ----- trim
まとめ
- TRIM関数は、文字列の前後から空白を削除する関数
- TRIM関数をwhere条件に指定して、空白または空行またはNULL判定が可能
- DBMSによりLTRIM、RTRIMなど関数のバリエーションあり。削除文字指定が可能なものもある。