sql >> データベース >  >> RDS >> MariaDB

MariaDBでのCONCAT()のしくみ

    MariaDBでは、CONCAT() は、引数に対して文字列連結を実行する組み込みの文字列関数です。引数を連結した結果の文字列を返します。

    連結とは、2つ以上の文字列をエンドツーエンドで結合する操作です。

    CONCAT() 1つ以上の引数を受け入れ、それらはすべて単一の連結文字列として返されます。

    構文

    構文は次のようになります:

    CONCAT( str1, str2, ... )

    ここで、str1, str2, … 連結する文字列引数を表します。

    基本的な例は次のとおりです。

    SELECT CONCAT('Homer', 'Jay');

    結果:

    +------------------------+
    | CONCAT('Homer', 'Jay') |
    +------------------------+
    | HomerJay               |
    +------------------------+

    この場合、2つの文字列を連結しました。

    ここでも同じですが、今回は間にスペースを追加します:

    SELECT CONCAT('Homer', ' ', 'Jay');

    結果:

    +-----------------------------+
    | CONCAT('Homer', ' ', 'Jay') |
    +-----------------------------+
    | Homer Jay                   |
    +-----------------------------+

    この場合、3つの文字列を連結しました。

    これが5つです:

    SELECT CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson');

    結果:

    +---------------------------------------------+
    | CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson') |
    +---------------------------------------------+
    | Homer Jay Simpson                           |
    +---------------------------------------------+

    バイナリ文字列

    引数のいずれかがバイナリ文字列の場合、結果はバイナリ文字列になります。

    SELECT CONCAT(BINARY 'Homer', 'Jay');

    結果:

    +-------------------------------+
    | CONCAT(BINARY 'Homer', 'Jay') |
    +-------------------------------+
    | HomerJay                      |
    +-------------------------------+

    COLLATION()を使用できます 結果の照合をチェックする関数:

    SELECT COLLATION(CONCAT(BINARY 'Homer', 'Jay'));

    結果:

    +------------------------------------------+
    | COLLATION(CONCAT(BINARY 'Homer', 'Jay')) |
    +------------------------------------------+
    | binary                                   |
    +------------------------------------------+

    BINARYを削除した場合 演算子、別の結果が得られます:

    SELECT COLLATION(CONCAT('Homer', 'Jay'));

    結果:

    +-----------------------------------+
    | COLLATION(CONCAT('Homer', 'Jay')) |
    +-----------------------------------+
    | utf8_general_ci                   |
    +-----------------------------------+

    また、MariaDBのドキュメントによると、数値引数は同等のバイナリ文字列形式に変換されます。これを回避するには、明示的な型キャストを実行します(CAST()を使用)。 またはCONVERT()

    ヌル引数

    引数のいずれかがnullの場合 、CONCAT() nullを返します 。

    ただし、例外が1つあります。Oracleモードの場合(つまり、sql_mode=ORACLE )、任意のnull 引数は単に無視されます。

    まず、CONCAT()の方法を見てみましょう。 デフォルトモードで動作します。

    セッションをデフォルトモードに設定します:

    SET SESSION sql_mode=DEFAULT;

    次に、CONCAT()を実行します nullを使用 引数:

    SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');

    結果:

    +--------------------------------------------+
    | CONCAT('Homer', ' ', null, ' ', 'Simpson') |
    +--------------------------------------------+
    | NULL                                       |
    +--------------------------------------------+

    予想どおり、結果はnullです。 。

    それでは、セッションをOracleモードに切り替えましょう:

    SET SESSION sql_mode=ORACLE;

    それでは、前のCONCAT()を実行してみましょう。 もう一度例:

    SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');

    結果:

    +--------------------------------------------+
    | CONCAT('Homer', ' ', null, ' ', 'Simpson') |
    +--------------------------------------------+
    | Homer  Simpson                             |
    +--------------------------------------------+

    今回はnullを無視しました 引数、および残りのすべての非nullを連結しました 引数。よく見ると、両方のスペースが連結されていることがわかります。そのため、Homerの間に2つのスペースがあります。 およびSimpson

    nullの場合 -安全な代替手段、CONCAT_WS()を使用 。その関数はnullを無視します Oracleモードでない場合でも、値。

    または、IFNULL()を使用することもできます nullの代替(文字列)値を提供する 値(空の文字列など)。

    単一の引数

    CONCAT()を呼び出す 引数が1つしかない場合は、その引数を返すだけです:

    SELECT CONCAT('Homer');

    結果:

    +-----------------+
    | CONCAT('Homer') |
    +-----------------+
    | Homer           |
    +-----------------+

    引数がありません

    CONCAT()を呼び出す 引数を渡さないとエラーが発生します:

    SELECT CONCAT();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONCAT'

    1. 欠落しているアーカイブログからスタンバイデータベースを回復する方法

    2. MicrosoftIgniteでMichalBarとMeに会いましょう!

    3. SQL Serverのvarchar列から奇妙な文字(帽子をかぶったA)を削除します

    4. Django1.6を使用したトランザクション管理