忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

MySQL 文字列から空白または指定した文字列を取り除く方法について(TRIM、LTRIM、RTRIM)

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

コメント

コメントを書く