SQLServerが最初に一致する文字列を置換する方法

1169 ワード

SqlServerでは、文字列の正規表現操作は直接サポートされていません.いくつかの特殊な文字列操作は、複数のステップで完了する必要があります.
文字列のテキストを置換するだけで最初に表示されるコンテンツに遭遇する場合があります.replaceで直接完了することはできません.次の2つのステップに分解できます.
1)文字列の最初に現れるテキストの位置を見つけ、charindex関数を使用して完成する.
2)見つかった位置からテキストの長さ範囲を検索する文字列を置換し,stuff関数を実現する.
関数として書くと次のようになります.
CREATE FUNCTION dbo.ReplaceFirst 
(
	@source nvarchar(max), @find nvarchar(1000), @repl nvarchar(1000)
)
RETURNS nvarchar(max)
AS
BEGIN
	DECLARE @ResultVar nvarchar(max)  -- return value
    DECLARE @Pos int                  -- find the first position 
	set @Pos = CHARINDEX(@find, @source)
	
	-- not found, return orginal 
    if @Pos = 0 return @source  
    
    set @ResultVar = stuff(@source, @Pos, len(@find), @repl)
    
	-- Return the result of the function
	RETURN @ResultVar

END
GO

例えば、次のような文字呂は、最初のdivブロックラベルを削除したいと考えています.
「私はブロック要素を必要としません.私はブロック1です.私はブロック2です.」
呼び出し可能:
select
dbo.replaceFirst(
    dbo.replaceFirst('
', '
', '' ), '
', '' )

結果は「ブロック要素は必要ありません.私はブロックです.私はブロックです.」