カテゴリ:

文字列とバイナリ関数 (一般)

INSERT

指定された位置から始まる指定された長さのサブ文字列を、新しい文字列またはバイナリ値で置き換えます。

この機能を INSERT DML コマンドと混同しないでください。

構文

INSERT( <base_expr>, <pos>, <len>, <insert_expr> )
Copy

引数

base_expr

文字を挿入/置換する文字列または BINARY 式です。

pos

文字の挿入を開始するオフセットです。これは0ベースではなく、1ベースです。つまり、文字列の最初の文字は、位置0ではなく位置1にあると見なされます。たとえば、文字列の先頭に挿入するには、 pos を1に設定します。

有効な値は、1から文字列の長さより1つ大きい値までです(この値を含む)。

pos を文字列の長さより1つ大きく設定すると、操作は追加と同等になります。(これには、 len パラメーターが0である必要もあります。これは、最後の文字を過ぎた文字を削除しないようにするためです。)

len

置き換える文字数です( pos から)。有効な値の範囲は、0から pos 、さらに文字列の終わりまでの文字数です。これが0の場合、既存の文字を削除せずに新しい文字を追加することを意味します。

insert_expr

base_expr に挿入する文字列です。この文字列が空で、 len がゼロより大きい場合、事実上の操作は削除になります(一部の文字は削除され、何も追加されません)。

使用上の注意

  • base_exprinsert_expr は同じデータ型でなければなりません。両方が文字列(例: VARCHAR)か、両方がバイナリである必要があります。

  • 引数のいずれかが NULL の場合、戻り値は NULLです。

戻り値

base_expr のコピーを作成し、 pos で始まる len 文字を削除してから、 posinsert_expr を挿入するのと同等の文字列または BINARY を返します。

元の入力 base_expr は変更されません。関数は、個別の(変更された)コピーを返します。

これは簡単な例です。

SELECT INSERT('abc', 1, 2, 'Z') as STR;
+-----+
| STR |
|-----|
| Zc  |
+-----+
Copy

この例は、置換文字列の長さが、置換されるサブ文字列の長さと異なる場合があることを示しています。

SELECT INSERT('abcdef', 3, 2, 'zzz') as STR;
+---------+
| STR     |
|---------|
| abzzzef |
+---------+
Copy

これは、置換文字列が空の(関数は、開始位置から始まる指定された数の文字を削除し、文字を追加しない)場合に何が起こるかを示しています。

SELECT INSERT('abc', 2, 1, '') as STR;
+-----+
| STR |
|-----|
| ac  |
+-----+
Copy

これは、元の文字列にある最後の文字の直後に文字を追加することにより、追加操作として INSERT を使用します。

SELECT INSERT('abc', 4, 0, 'Z') as STR;
+------+
| STR  |
|------|
| abcZ |
+------+
Copy

次のすべては、少なくとも1つの引数が NULL であるため、 NULLを返します。

SELECT INSERT(NULL, 1, 2, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', NULL, 2, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', 1, NULL, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', 1, 2, NULL) as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy