知っておくと便利な関数 - STUFF

知っておくと便利な関数 - STUFF

ここでは、知っておくと便利なビルトイン関数のひとつ、STUFF 関数についてご説明します。


STUFF 関数

STUFF 関数は、文字列の指定した箇所を、指定した文字列に置き換えてくれる関数です。

入力引数は 4 つで、構文は以下の通りです。

STUFF([文字列], [開始位置], [長さ], [置き換える文字列])

[文字列] の [開始位置] から、指定した [長さ] の文字数の文字を削除して、その位置に [置き換える文字列] を挿入した文字列を返します。

[開始位置] は、最初の文字を 1 として数え、削除の開始位置を整数で指定します。

[開始位置] に 0 以下の値を指定したり、[文字列] の長さより大きい値を指定すると、戻り値は NULL になります。


[長さ] には、削除する文字数を整数で指定します。

[長さ] にマイナスの値を指定すると、戻り値は NULL になります。

[長さ] に 0 を指定すると、削除は行われずに、[開始位置] に [置き換える文字列] が挿入されます。

[開始位置] + [長さ] が [文字列] の長さより大きくなる場合は、[開始位置] から [文字列] の最後までの文字が削除されて、[置き換える文字列] が挿入されます。

また、同じ方法で、文字列の代わりにバイナリデータを置き換えることもできます。


それでは、STUFF 関数を使って文字列を置き換えてみましょう。

DECLARE @Value VARCHAR(10) = 'ABCDEFGHIJ';

SELECT	 STUFF(@Value, 3, 5, 'XXX') AS Value1,
         STUFF(@Value, 3, 0, 'XXX') AS Value2,
         STUFF(@Value, 3, 10, 'XXX') AS Value3,
         STUFF(@Value, 0, 5, 'XXX') AS Value4;

知っておくと便利な関数 - STUFF 1


Value1 は、'ABCDEFGHIJ' の 3 文字目から 5 文字の 'CDEFG' が削除されて、そこに XXX が挿入され 'ABXXXHIJ' が返っています。

Value2 は、[長さ] が 0 なので、'ABCDEFGHIJ' の 3 文字目から XXX が挿入され、'ABXXXCDEFGHIJ' が返っています。

Value3 は、'ABCDEFGHIJ' の 3 文字目以降の文字が全て削除され、そこに XXX が挿入されて 'ABXXX' になっています。

Value4 は、[開始位置] が 0 なので、戻り値が NULL になっています。


カラムの値からカンマ区切り (CSV) の文字列を生成する」でご紹介したように、クエリーで FOR XML 句などを使って文字列をつなげて、カンマ区切りの文字列を生成した後に、1 文字目のカンマを取り除きたいような時にも STUFF 関数が使えます。

DECLARE @Value VARCHAR(100) = ',Tokyo,Osaka,Fukuoka';

SELECT STUFF(@Value, 1, 1, '') AS Value1;

知っておくと便利な関数 - STUFF 2


以上、知っておくと便利なビルトイン関数のひとつ、STUFF 関数についてご説明しました。

© 2010-2024 SQL Server 入門