MySQL で文字列から空白または指定した文字列を取り除く方法として TRIM LTRIM RTRIM 関数があります。
この関数はマルチバイトセーフなので、全角文字も1文字として扱われます。
なお、 TRIM 関数の説明は以下の通りです。
■[TRIM関数]の説明
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
-- {BOTH | LEADING | TRAILING} : TRIMする方法を指定する。
-- BOTH : 先頭からと最後尾からの両方からTRIM
-- LEADING : 先頭からのTRIM
-- TRAILING : 最後尾からのTRIM
-- [remstr] : 削除対象文字列
-- str : TRIM対象文字列
TRIM([remstr FROM] str)
それでは順次、TRIM 関数の使用例を示します。
■[TRIM関数]の例
MariaDB [(none)]> SELECT
-> TRIM(' ABC ') AS '一般的なTRIM'
-> ,TRIM(BOTH '-' FROM '--ABC--') AS '指定文字列TRIM:BOTH'
-> ,TRIM(LEADING '-' FROM '--ABC--') AS '指定文字列TRIM:LEADING'
-> ,TRIM(TRAILING '-' FROM '--ABC--') AS '指定文字列TRIM:TRAILING'
-> ;
+--------------+---------------------+------------------------+-------------------------+
| 一般的なTRIM | 指定文字列TRIM:BOTH | 指定文字列TRIM:LEADING | 指定文字列TRIM:TRAILING |
+--------------+---------------------+------------------------+-------------------------+
| ABC | ABC | ABC-- | --ABC |
+--------------+---------------------+------------------------+-------------------------+
1 row in set (0.03 sec)
確かに指定文字列を TRIM 処理されるのが分かります。
また、この関数はマルチバイトセーフなので、指定文字列を全て全角の文字にしてテストしてみます。
MariaDB [(none)]> SELECT
-> TRIM(' あいう ') AS '一般的なTRIM'
-> ,TRIM(BOTH 'あ' FROM 'ああABCああ') AS '指定文字列TRIM:BOTH'
-> ,TRIM(LEADING 'あ' FROM 'ああABCああ') AS '指定文字列TRIM:LEADING'
-> ,TRIM(TRAILING 'あ' FROM 'ああABCああ') AS '指定文字列TRIM:TRAILING'
-> ;
+--------------+---------------------+------------------------+-------------------------+
| 一般的なTRIM | 指定文字列TRIM:BOTH | 指定文字列TRIM:LEADING | 指定文字列TRIM:TRAILING |
+--------------+---------------------+------------------------+-------------------------+
| あいう | ABC | ABCああ | ああABC |
+--------------+---------------------+------------------------+-------------------------+
1 row in set (0.01 sec)
最初の TRIM では全角空白は取除けないので、以下の様に BOTH 指定で全角空白を指定します。
MariaDB [(none)]> SELECT TRIM(BOTH ' ' FROM ' あいう '); +-----------------------------------+ | TRIM(BOTH ' ' FROM ' あいう ') | +-----------------------------------+ | あいう | +-----------------------------------+ 1 row in set (0.00 sec)
TRIM 対象文字列 '△あいう△'(空白を△)から空白が削除されています。
なお、BOTH 指定が無くても、以下の様に BOTH 指定と同様の処理となります。
MariaDB [(none)]> SELECT TRIM(BOTH ' ' FROM ' あいう '); +-----------------------------------+ | TRIM(BOTH ' ' FROM ' あいう ') | +-----------------------------------+ | あいう | +-----------------------------------+ 1 row in set (0.00 sec)
RTRIM 関数に関連してですが、文字列の空白を前後から削除する専門の関数として LTRIM RTRIM 関数があります。
LTRIM は文字列の先頭から、RTRIM は文字列の最後から空白を削除します。以下に例を示します。 (なお、これらの関数もマルチバイトセーフです。)
■[LTRIM関数][RTRIM関数]の例
MariaDB [(none)]> SELECT
-> LTRIM(' ABC ')
-> ,RTRIM(' ABC ')
-> ,LTRIM(' あいう ')
-> ,RTRIM(' あいう ')
-> ;
+------------------+------------------+---------------------+---------------------+
| LTRIM(' ABC ') | RTRIM(' ABC ') | LTRIM(' あいう ') | RTRIM(' あいう ') |
+------------------+------------------+---------------------+---------------------+
| ABC | ABC | あいう | あいう |
+------------------+------------------+---------------------+---------------------+
1 row in set (0.00 sec)
TRIM された結果になっていると思うのですが、取り敢えず TRIM 結果に文字列を連結して確かめます。
MariaDB [(none)]> SELECT
-> CONCAT(LTRIM(' ABC '), '/')
-> ,CONCAT(RTRIM(' ABC '), '/')
-> ,CONCAT(LTRIM(' あいう '), '/')
-> ,CONCAT(RTRIM(' あいう '), '/')
-> ;
+-------------------------------+-------------------------------+----------------------------------+----------------------------------+
| CONCAT(LTRIM(' ABC '), '/') | CONCAT(RTRIM(' ABC '), '/') | CONCAT(LTRIM(' あいう '), '/') | CONCAT(RTRIM(' あいう '), '/') |
+-------------------------------+-------------------------------+----------------------------------+----------------------------------+
| ABC / | ABC/ | あいう / | あいう/ |
+-------------------------------+-------------------------------+----------------------------------+----------------------------------+
1 row in set (0.03 sec)
PR
コメント