SQL道場 文字列関数 STUFF関数

SQLで文字列の部分的入れ替えするSTUFF関数について記載しています。

対応データベースSQLServer

STUFF関数の文法

SELECT STUFF(対象文字列,開始位置,削除する文字列長,入れ替える文字列) FROM テーブル
引数対象文字列文字データまたはバイナリ データの定数、変数、または列を使用できます。
開始位置削除と挿入を開始する位置を指定する整数値です。
start が負の値またはゼロの場合は、null 文字列が返されます。
start が最初の 「対象文字列」よりも長い場合は、null 文字列が返されます。
start には bigint 型を使用できます。
削除する文字列長削除する文字数を指定する整数です。
length が負の値の場合は、null 文字列が返されます。 length が最初の 「対象文字列」 よりも長い場合、最後の 「対象文字列」 の末尾の文字まで削除が実行されます。
length がゼロの場合、挿入は開始位置で行われ、文字は一切削除されません。
length には bigint 型を使用できます
入れ替える文字列文字データの式です。 「入れ替える文字列」には、文字データまたはバイナリ データの定数、変数、または列を指定できます。
この式は、「対象文字列」 の start から始まる length 文字を置き換えます。 NULL に 「入れ替える文字列」 を指定すると、何も挿入されず、文字が削除されます。
返値サポートされている文字データ型のいずれかの場合は、文字データが返されます。
サポートされているバイナリ データ型のいずれかの場合は、バイナリ データが返されます。

STUFF関数は指定された文字列の開始位置から削除する文字列長分を削除し、入れ替える文字列を挿入して編集後の文字列を返します。

開始位置または長さが負の場合、または開始位置が 1 番目の文字列の長さを超える場合は NULL 文字列が返されます。 開始位置が 0 の場合は、NULL 値が返されます。 削除する長さが 1 番目の文字列より長い場合は、1 番目の文字列の最初の文字まで削除されます。

結果値が、戻り値の型でサポートされている最大値より大きい場合は、エラーが発生します。

マイクロソフト公式

STUFF関数の動作図

STUFF関数の動作図

STUFF関数での文字数は、ひらがな、カタカナ、漢字といったマルチバイト文字も1文字となります。

実行例

SQLServerの実行例

/* SQL Server SQLで文字列の部分的入れ替えサンプル */
SELECT STR,STUFF(STR,2,3,'###') FROM [testdb].[dbo].[WORK];
STUFF関数サンプル実行結果