0

我正在使用 SQL SERVER 2008。我在 sql 中有以下字符串。

DECLARE @stringRTF VARCHAR(MAX)

set @stringRTF = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Tahoma;}} \viewkind4\uc1\pard\f0\fs18 \v [\TEST\*#70_250_263] \v0 \par '

现在我想从上面的字符串中找到字符串“\TEST*#”。如果它存在于完整字符串中,那么我想从完整字符串中剪切字符串 [\TEST*#70_250_263]。

所以它应该像返回

[\TEST\*#70_250_263]

作为返回字符串。

那么任何人都可以帮助我如何从原始字符串中找到并剪切该字符串吗?

提前致谢。

4

2 回答 2

2

我认为下面的代码应该可以工作:

DECLARE @stringRTF VARCHAR(1000), @stringFind VARCHAR(30), @startIndex 

int,@outputString varchar(100)

set @stringRTF = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Tahoma;}} \viewkind4\uc1\pard\f0\fs18 \v [\TEST\*#70_250_263] \v0 \par '

SET @stringFind = '\TEST\*#'
SET @startIndex =  CHARINDEX(@stringFind, @stringRTF) - 1
SET @outputString = SUBSTRING(@stringRTF , @startIndex,  len(@stringRTF))
SET @outputString = LEFT(@outputString , CHARINDEX(']',@outputString) )
PRINT @outputString --Your result

如果您遇到任何错误,请告诉我。

于 2013-05-17T10:08:16.910 回答
1

试试这个——

DECLARE @stringRTF VARCHAR(1024)
SELECT @stringRTF = 
    '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Tahoma;}} \viewkind4\uc1\pard\f0\fs18 \v [\TEST\*#70_250_263] \v0 \par '

DECLARE @res VARCHAR(100)

SELECT @res = SUBSTRING(
    @stringRTF, 
    CHARINDEX('\TEST\*#', @stringRTF) - 1, 
    CHARINDEX(']', @stringRTF) - CHARINDEX('\TEST\*#', @stringRTF) + 2 
)

PRINT @res

输出:

[\TEST\*#70_250_263]

@ITBeginner,在您的代码中更改此行:

'\TEST*#' to '\TEST\*#'
@stringRTF.length to LEN(@stringRTF)
于 2013-05-17T10:19:48.143 回答