MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのSUBSTRING_INDEX()関数が元の文字列をそのまま返すケースとは?

MySQLのSUBSTRING_INDEX()関数では、引数「count」に指定した値が、区切り文字(delimiter)の出現回数の総数よりも大きい場合、入力された文字列がそのまま出力として返されます。以下の例でその挙動を確認できます。

mysql> Select SUBSTRING_INDEX('www.google.co.in','.',4);
+-------------------------------------------+
| SUBSTRING_INDEX('www.google.co.in','.',4) |
+-------------------------------------------+
| www.google.co.in                          |
+-------------------------------------------+
1 row in set (0.00 sec)

このクエリでは、区切り文字「.」は「www.google.co.in」という文字列の中に合計3回しか出現していません。しかし、count引数には4が指定されており、実際の出現回数を上回っています。このような場合、SUBSTRING_INDEX()関数はエラーを返すことなく、元の文字列全体をそのまま結果として返します。

SUBSTRING_INDEX()関数の基本動作

SUBSTRING_INDEX(文字列, 区切り文字, count) は、指定した区切り文字がcount回目に出現する位置までの部分文字列を返す関数です。たとえば、countに2を指定すれば、左から2番目の区切り文字までの文字列が抽出されます。

mysql> Select SUBSTRING_INDEX('www.google.co.in','.',2);
+-------------------------------------------+
| SUBSTRING_INDEX('www.google.co.in','.',2) |
+-------------------------------------------+
| www.google                                |
+-------------------------------------------+
1 row in set (0.00 sec)

補足:負の値を指定した場合

また、countに負の値を指定すると、文字列の末尾から数えてcount番目の区切り文字より右側の部分文字列が返されます。

mysql> Select SUBSTRING_INDEX('www.google.co.in','.',-2);
+--------------------------------------------+
| SUBSTRING_INDEX('www.google.co.in','.',-2) |
+--------------------------------------------+
| co.in                                      |
+--------------------------------------------+
1 row in set (0.00 sec)

このように、SUBSTRING_INDEX()関数はcountの絶対値が区切り文字の出現回数を超えていてもエラーにならず、単純に文字列全体(または対応する側の文字列全体)を返すため、ドメイン名やパスの分解など、文字列操作において安全かつ便利に利用できます。

  1. MySQLのINTERVAL()関数で第1引数にNULLを指定した場合の戻り値とは?

    INTERVAL()関数の第1引数がNULLだった場合の戻り値MySQLのINTERVAL()関数は、第1引数と残りの引数リストを比較し、第1引数の値がどこまで続く範囲に該当するかを示すインデックスを返す関数です。そして重要なポイントとして、第1引数にNULLを指定した場合、戻り値は必ず-1になります。実際の動作を以下の例で確認してみましょう。mysql> Select INTERVAL(NULL,20,32,38,40,50,55);+--------------------------------------+| INTERVAL(NULL,20,32,38,40,50,55)

  2. MySQLのMAKE_SET()関数がNULLを返すのはどのような場合か?

    MySQLのMAKE_SET()関数は、第1引数に指定したビット値そのものがNULLである場合に、結果としてNULLを返します。一方、文字列側の引数にNULLが含まれていても、それらは単に無視されるだけで、エラーにはなりません。MAKE_SET()関数は、第1引数のビット値をもとに、対応する位置の文字列をカンマ区切りで連結して返す関数です。どのような条件でNULLが返るのか、具体的な実行例を見ていきましょう。例1:第1引数(ビット値)がNULLの場合mysql> Select MAKE_SET(NULL, A,B,C); +-----------------------------+ |