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

MySQLのINSERT()関数:削除する文字数が元の文字列の長さを超えた場合の動作

削除文字数が元の文字列を超える場合、INSERT()関数はどう動く?

MySQLのINSERT()関数において、削除するよう指定した文字数が元の文字列に実際に存在する文字数を超えていた場合でも、エラーが発生することはありません。その代わり、関数は元の文字列の末尾に到達するまで文字の削除を続行します。

つまり、指定された開始位置から文字列の終わりまでのすべての文字が削除され、その後に指定した置換用の文字列が挿入されるという仕組みです。

INSERT()関数の基本構文

INSERT(元の文字列, 開始位置, 削除する長さ, 挿入する文字列)

具体例

以下の例では、12文字の文字列「myteststring」に対して、3番目の位置から15文字を削除しようとしています。しかし、3番目の位置以降に実際に存在するのは10文字だけです。

mysql> Select INSERT('myteststring',3,15,'original');

+----------------------------------------+
| INSERT('myteststring',3,15,'original') |
+----------------------------------------+
| myoriginal                             |
+----------------------------------------+

1 row in set (0.00 sec)

結果を見ると、「myteststring」の3番目以降の残りの文字(10文字)がすべて削除され、その位置に「original」が挿入されています。最終的な出力は「myoriginal」となります。

ポイントまとめ

  • 削除文字数の指定が大きすぎてもエラーにはならない
  • 関数は自動的に文字列の末尾までの削除にとどまる
  • 余分な指定分は単純に無視されて処理が完了する

このように、MySQLのINSERT()関数は柔軟な仕様になっているため、削除対象の文字数が残り文字数より多くなってもクエリが失敗することはありません。文字列操作を行う際は、この挙動を理解しておくと安心です。

  1. MySQLのINTERVAL()関数とは?構文と戻り値の仕組みを実例付きで解説

    MySQLのINTERVAL()関数は、第1引数とそれ以降の複数の引数を比較し、「第1引数より大きい値」が最初に現れる位置(インデックス)を返す関数です。複数の閾値と一度に大小比較を行いたい場合などに活用できます。 INTERVAL()関数の構文 INTERVAL(N, N1, N2, N3, …) この関数は、第1引数であるNを、残りの引数であるN1、N2、N3…と順番に比較していきます。すべての引数は整数として扱われ、比較結果に応じて以下のような値を返します。 N < N1 の場合 → 0 を返す N < N2 の場合 → 1 を返す N < N3 の場合 → 2

  2. ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?

    MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった