忍者ブログ

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

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

MySQL 文字列の連結する方法について(CONCAT、文字列を並べて配置)

MySQL で文字列の連結を行う方法として CONCAT 関数があります。

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

CONCAT(str1, str2, str3, ...)
-- 文字列 str1, str2, str3 と指定されたものを連結した文字列を返し、
-- 引数に NULL が含まれている場合は NULL を返します。
-- なお、引数に数値が指定された場合は、文字列に変換されて連結されます。


オラクルでは CONCAT 関数の引数は2個までしかないのですが、MySQL では2個以上連結が可能です。 (もっともオラクルでは「||」で連結すれば同じ事ができます)
それでは、CONCAT 関数の使用例を示します。

■[CONCAT関数]の例

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

確かに数値の場合も文字列に変換されて処理されるのが分かります。
また、引数の中に NULL が存在する場合は NULL が返されます。

上記の例では、全てリテラルの文字列を引数に指定しましたが、 リテラルであればそれらを単に羅列して SQL に記述すれば連結する様です。

■[文字列を並べて配置]の例

MariaDB [(none)]> SELECT 'ABC' 'DEFG' 'あいう' 'HI'   AS '文字列の連結';
+-----------------+
| 文字列の連結    |
+-----------------+
| ABCDEFGあいうHI |
+-----------------+
1 row in set (0.00 sec)

確かに 文字列が連結されていますが、これにそこまでの有用性は無いかもしれません。

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

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

MariaDB [(none)]> USE test;
Database changed
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(id, '-', val) FROM t_auto;
+----------------------+
| CONCAT(id, '-', val) |
+----------------------+
| 1-test1              |
| 2-test2              |
| 4-test4              |
| 5-test-a             |
| 6-あいう             |
+----------------------+
5 rows in set (0.00 sec)

テーブルデータの場合は上記の文字列の連続配置の様にはできなくて(オラクルの連結子「||」の様にはいかないので) CONCAT 関数の出番となります。












PR

コメント

コメントを書く