2

私は文字列を持っています:

'This is some random text so you don't get upset [rethink]'

またはこの文字列

'This is some random text so you don't get upset [me] and [123]'

[テキスト] 文字列を検索して置き換えるために TSQL を使用することは可能ですか?

結果:

'This is some random text so you don't get upset '

またはこの文字列

'This is some random text so you don't get upset  and '

編集:

関数がより動的になるように、受け入れられた回答を変更しました。

CREATE FUNCTION [dbo].[StripTagWithChar]
(@TagLeft NVARCHAR(1),@TagText NVARCHAR(MAX),@TagRight NVARCHAR(1))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX(@TagLeft,@TagText)
    SET @End = CHARINDEX(@TagRight,@TagText,@Start+1)
    SET @Length = (@End - @Start) + 1

    WHILE (@Start > 0
        AND @End > 0
        AND @Length > 0)
    BEGIN
        SET @TagText = STUFF(@TagText,@Start,@Length,'')
        SET @Start = CHARINDEX(@TagLeft,@TagText)
        SET @End = CHARINDEX(@TagRight,@TagText,@Start+1)
        SET @Length = (@End - @Start) + 1
    END

    RETURN Replace(LTRIM(RTRIM(@TagText)),'  ',' ')
END

この関数は、括弧を入力として受け入れます。

select [dbo].[StripTagWithChar]( '{' , 'this is {not} awesome' , '}' )

そして最もクールなことは、次のように同一の括弧でタグをフィルタリングすることです:

select [dbo].[StripTagWithChar]( '=' , 'this is =not= awesome' , '=' )
4

1 に答える 1

3

以前に作成したUDFに若干の変更を加えてHTMLタグを削除することをお勧めします...単に<and>[andに置き換えます]

CREATE FUNCTION [dbo].[udf_StripTag]
(@TagText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('[',@TagText)
    SET @End = CHARINDEX(']',@TagText,CHARINDEX('[',@TagText))
    SET @Length = (@End - @Start) + 1

    WHILE (@Start > 0
        AND @End > 0
        AND @Length > 0)
    BEGIN
        SET @TagText = STUFF(@TagText,@Start,@Length,'')
        SET @Start = CHARINDEX('[',@TagText)
        SET @End = CHARINDEX(']',@TagText,CHARINDEX('[',@TagText))
        SET @Length = (@End - @Start) + 1
    END

    RETURN LTRIM(RTRIM(@TagText))
END
GO
于 2012-06-28T22:56:44.223 に答える