在sql中查找字符串中的子字符串

时间:2013-05-17 09:51:38

标签: string sql-server-2008 tsql find substring

我正在使用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]

作为返回字符串。

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

提前致谢。

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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)