SQLServerが最初に一致する文字列を置換する方法
1169 ワード
SqlServerでは、文字列の正規表現操作は直接サポートされていません.いくつかの特殊な文字列操作は、複数のステップで完了する必要があります.
文字列のテキストを置換するだけで最初に表示されるコンテンツに遭遇する場合があります.replaceで直接完了することはできません.次の2つのステップに分解できます.
1)文字列の最初に現れるテキストの位置を見つけ、charindex関数を使用して完成する.
2)見つかった位置からテキストの長さ範囲を検索する文字列を置換し,stuff関数を実現する.
関数として書くと次のようになります.
例えば、次のような文字呂は、最初のdivブロックラベルを削除したいと考えています.
「私はブロック要素を必要としません.私はブロック1です.私はブロック2です.」
呼び出し可能:
結果は「ブロック要素は必要ありません.私はブロックです.私はブロックです.」
文字列のテキストを置換するだけで最初に表示されるコンテンツに遭遇する場合があります.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(' ',
'',
''
),
'',
''
)
結果は「ブロック要素は必要ありません.私はブロックです.私はブロックです.」