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'