忍者ブログ

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

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

MySQL 文字列を区切り文字を使用した連結の方法について(CONCAT_WS)

MySQL で区切り文字列を使用した連結を行う方法として CONCAT_WS 関数があります。

以前説明しました以下の CONCAT_WS 関数の拡張版の様なものです。
MySQL 文字列の連結する方法について(CONCAT、文字列を並べて配置)

なお CONCAT_WS 関数は以下の様な引数をとります。

CONCAT_WS(separator, str1, str2, str3, ...)
-- separator : 区切り文字列
-- str1, str2, str3, ... : 連結する文字列(NULL が在る場合はそれを無視する)


それでは、CONCAT_WS 関数の使用例を示します。

■[CONCAT_WS関数]の例

MariaDB [(none)]> SELECT
    ->     CONCAT_WS('/', 'ABC', 'DEFG', 'あいう', 'HI')   AS '文字列の連結'
    ->    ,CONCAT_WS('/', 'ABC', 100, '全角')              AS 'リテラル数値を連結'
    ->    ,CONCAT_WS('/', 100, 200)                        AS 'リテラル数値のみを連結'
    ->    ,CONCAT_WS('/', 'ABC', NULL, '全角')             AS 'NULLを連結'
    ->    ,CONCAT_WS('/', 'ABC', NULL)                     AS 'NULLを連結2'
    -> ;
+--------------------+--------------------+------------------------+------------+-------------+
| 文字列の連結       | リテラル数値を連結 | リテラル数値のみを連結 | NULLを連結 | NULLを連結2 |
+--------------------+--------------------+------------------------+------------+-------------+
| ABC/DEFG/あいう/HI | ABC/100/全角       | 100/200                | ABC/全角   | ABC         |
+--------------------+--------------------+------------------------+------------+-------------+
1 row in set (0.00 sec)

確かに数値の場合も文字列に変換されて処理されるのが分かります。
また、引数の中に NULL が存在する場合は NULL をスキップした文字列が返されます。
なお、最後が NULL で終わる場合は最後の連結文字列は追加されないので、5個目の例の様に連結文字列が無い場合もあります。
上記の例では、全てリテラルの文字列を引数に指定しましたが、 リテラルであればそれらを単に羅列して SQL に記述すれば連結する様です。

なお、連結文字列は文字列なので2文字以上でも可能です。

■[連結文字列が2文字以上]の例

MariaDB [(none)]> SELECT
    ->     CONCAT_WS('//', 'ABC', 'DEFG', 'あいう', 'HI')   AS '文字列の連結'
    ->    ,CONCAT_WS('//', 'ABC', 100, '全角')              AS 'リテラル数値を連結'
    ->    ,CONCAT_WS('//', 100, 200)                        AS 'リテラル数値のみを連結'
    ->    ,CONCAT_WS('//', 'ABC', NULL, '全角')             AS 'NULLを連結'
    ->    ,CONCAT_WS('//', 'ABC', NULL)                     AS 'NULLを連結2'
    -> ;
+-----------------------+--------------------+------------------------+------------+-------------+
| 文字列の連結          | リテラル数値を連結 | リテラル数値のみを連結 | NULLを連結 | NULLを連結2 |
+-----------------------+--------------------+------------------------+------------+-------------+
| ABC//DEFG//あいう//HI | ABC//100//全角     | 100//200               | ABC//全角  | ABC         |
+-----------------------+--------------------+------------------------+------------+-------------+
1 row in set (0.00 sec)

この例によれば、1個上の連結文字列が「//」に変更されていることがわかります。

■[CONCAT_WS関数]をテーブルデータを引数にする例

テーブルデータを引数に指定するために、データベースを指定し「t_auto」なるテストテーブルの一覧を取得します。

MariaDB [(none)]> USE test;
Database changed

MariaDB [test]> SET NAMES cp932;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> SELECT * FROM t_auto;
+----+--------+
| id | val    |
+----+--------+
|  1 | test1  |
|  2 | test2  |
|  4 | test4  |
|  5 | test-a |
|  6 | あいう |
+----+--------+
5 rows in set (0.00 sec)

それではこのテーブルの「id」と「val」の連結を一覧してみます。

MariaDB [test]> SELECT CONCAT_WS('-', id, val) FROM t_auto;
+-------------------------+
| CONCAT_WS('-', id, val) |
+-------------------------+
| 1-test1                 |
| 2-test2                 |
| 4-test4                 |
| 5-test-a                |
| 6-あいう                |
+-------------------------+
5 rows in set (0.03 sec)











PR

コメント

コメントを書く