String 从sql中的字符串查找子字符串

String 从sql中的字符串查找子字符串,string,sql-server-2008,tsql,find,substring,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 ' 现在我想从上面的字符串中找到字符串“\TE

我正在使用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]
作为返回字符串

有谁能帮我找到并从原始字符串中剪下那个字符串吗


提前感谢。

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

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

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

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

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
如果遇到任何错误,请告诉我。

试试这个-

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]
@IT初学者,在代码中更改以下行:

'\TEST*#' to '\TEST\*#'
@stringRTF.length to LEN(@stringRTF)
试试这个-

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]
@IT初学者,在代码中更改以下行:

'\TEST*#' to '\TEST\*#'
@stringRTF.length to LEN(@stringRTF)

你用什么?SQL SERVER 2008?@IT初学者我正在使用SQL SERVER 2008。您可以使用LIKE或REGEXP(如“WHERE字段LIKE”%[\TEST*\70\u 250\u 263]”或“WHERE字段REGEXP‘TEST’”)然后在代码中实际执行提取,也可以使用PREG\u捕获,如下所示:(如果您使用的是MySQL。MSSQL可能支持像Oracle这样的REGEXP\u SUBSTR。您使用什么?SQL SERVER 2008?@IT初学者我使用的是SQL SERVER 2008。您可以使用like或REGEXP(如“WHERE字段,如“%[\TEST*\70\u 250\u 263]”或“WHERE字段REGEXP‘TEST’”)然后在代码中实际执行提取,或者可以使用PREG_CAPTURE,如下所示:(如果您使用的是MySQL。MSSQL可能支持像Oracle这样的REGEXP_SUBSTR。很好。我的答案不知道问题出在哪里。@IT初学者,很乐意帮助您。为了减少语法错误,请尝试使用任何自动完成工具б如下:很好。我的答案不知道问题出在哪里。@IT初学者,很高兴帮助您。为了尝试使用自动完成工具б的语法错误更少,如下所示: