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

MariaDBでのCONCAT_WS()のしくみ

    MariaDBでは、CONCAT_WS() ConcatenateWithSeparatorの略である組み込みの文字列関数です。

    CONCAT_WS() 引数に対して文字列連結を実行します。最初の引数は残りの引数の区切り文字です。

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

    CONCAT_WS() 2つ以上の引数を受け入れます(ただし、2つの引数を指定すると、最初の引数が区切り文字であり、2番目の引数が連結される単一の文字列であるため、何も連結されません)。

    構文

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

    CONCAT_WS(separator,str1,str2,...)

    ここでseparator は区切り文字として使用される文字列であり、str1, str2, … 連結する文字列引数を表します。

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

    SELECT CONCAT_WS( ', ', 'Milk', 'Cheese', 'Bread');

    結果:

    +---------------------------------------------+
    | CONCAT_WS( ', ', 'Milk', 'Cheese', 'Bread') |
    +---------------------------------------------+
    | Milk, Cheese, Bread                         |
    +---------------------------------------------+

    この場合、区切り文字としてコンマとスペースを使用して3つの文字列を連結しました。

    別のセパレータを使用する別の方法は次のとおりです。

    SELECT CONCAT_WS('-', 'Blue', 'Red', 'Green');

    結果:

    +----------------------------------------+
    | CONCAT_WS('-', 'Blue', 'Red', 'Green') |
    +----------------------------------------+
    | Blue-Red-Green                         |
    +----------------------------------------+

    CONCAT_WS() CONCAT()に似ています 働き。 CONCAT_WS()の利点の1つ CONCAT()を介して 多くの文字列を連結すると明らかになります。

    CONCAT()を使用して前の例を実行するには 、各文字列の間にセパレータを繰り返す必要があります。

    このように:

    SELECT CONCAT('Blue', '-', 'Red', '-', 'Green');

    結果:

    +------------------------------------------+
    | CONCAT('Blue', '-', 'Red', '-', 'Green') |
    +------------------------------------------+
    | Blue-Red-Green                           |
    +------------------------------------------+

    連結する文字列がたくさんあると、これは扱いにくくなる可能性があります。

    セパレータなし

    セパレータとして空の文字列を指定すると、セパレータなしで文字列が連結されます:

    SELECT CONCAT_WS('', 'Blue', 'Red', 'Green');

    結果:

    +---------------------------------------+
    | CONCAT_WS('', 'Blue', 'Red', 'Green') |
    +---------------------------------------+
    | BlueRedGreen                          |
    +---------------------------------------+

    この場合、CONCAT()を使用した場合と同じ結果が得られます。 これらの3つの文字列を連結します。

    空の場合でも、セパレータを提供することが重要です。区切り文字を指定しないと、最初の連結文字列が区切り文字として使用されますが、これはおそらく必要なものではありません。

    例:

    SELECT CONCAT_WS('Blue', 'Red', 'Green', 'Orange');

    結果:

    +---------------------------------------------+
    | CONCAT_WS('Blue', 'Red', 'Green', 'Orange') |
    +---------------------------------------------+
    | RedBlueGreenBlueOrange                      |
    +---------------------------------------------+

    この場合、Blue は最初の引数であるため、最終的には区切り文字として使用されます。

    ヌル引数の連結

    CONCAT_WS()のもう1つのメリット CONCAT()を超えています nullということです -安全な。

    連結する引数のいずれかがnullの場合 、CONCAT_WS() それらを無視します。 CONCAT() 一方、関数はnullを返します (Oracleモードでない限り、nullは無視されます。 引数)。

    CONCAT_WS()を呼び出しましょう nullを使用 引数:

    SELECT CONCAT_WS('-', 'Blue', NULL, 'Green');

    結果:

    +---------------------------------------+
    | CONCAT_WS('-', 'Blue', NULL, 'Green') |
    +---------------------------------------+
    | Blue-Green                            |
    +---------------------------------------+

    予想どおり、CONCAT_WS() null引数をスキップし、残りの引数を連結しました。

    つまり、区切り文字として空の文字列を指定すると、CONCAT_WS()を使用できます。 nullとして -CONCAT()の安全なバージョン :

    SELECT CONCAT_WS('', 'Blue', NULL, 'Green');

    結果:

    +--------------------------------------+
    | CONCAT_WS('', 'Blue', NULL, 'Green') |
    +--------------------------------------+
    | BlueGreen                            |
    +--------------------------------------+

    ヌルセパレーター

    nullを提供する セパレーターは別の話です。これを行うと、nullが返されます 。

    SELECT CONCAT_WS(NULL, 'Blue', 'Red', 'Green');

    結果:

    +-----------------------------------------+
    | CONCAT_WS(NULL, 'Blue', 'Red', 'Green') |
    +-----------------------------------------+
    | NULL                                    |
    +-----------------------------------------+

    バイナリ文字列

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

    SELECT CONCAT_WS(', ', BINARY 'Apple', 'Orange');

    結果:

    +-------------------------------------------+
    | CONCAT_WS(', ', BINARY 'Apple', 'Orange') |
    +-------------------------------------------+
    | Apple, Orange                             |
    +-------------------------------------------+

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

    SELECT COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange'));

    結果:

    +------------------------------------------------------+
    | COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange')) |
    +------------------------------------------------------+
    | binary                                               |
    +------------------------------------------------------+

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

    SELECT COLLATION(CONCAT_WS(', ', 'Apple', 'Orange'));

    結果:

    +-----------------------------------------------+
    | COLLATION(CONCAT_WS(', ', 'Apple', 'Orange')) |
    +-----------------------------------------------+
    | utf8_general_ci                               |
    +-----------------------------------------------+

    単一の引数

    CONCAT_WS()を呼び出す 引数が1つしかない場合は、エラーが返されます:

    SELECT CONCAT_WS('Blue');

    結果:

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

    引数がありません

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

    SELECT CONCAT_WS();

    結果:

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

    1. PostgreSQLで既存のテーブルに自動インクリメントの主キーを追加するにはどうすればよいですか?

    2. xamppMySQLが起動しない

    3. RedHatLinuxに複数のPostgreSQLサーバーをインストールする方法

    4. MySQLでのLEFT()関数のしくみ