我正在尝试在SQL中搜索一个字符串,搜索前面几个我知道将是唯一的字符,然后将字符串返回到它之后的第一个空格。
然而,它没有回归我的期望。以下是我的发言:
declare @searchString varchar(max),
@searchForStartChars varchar(max)
set @searchString = 'My ST_Test001 testing blah'
set @searchForStartChars = 'ST_Test'
select SUBSTRING(@searchString,
charindex(@searchForStartChars,@searchString,1),
charindex(' ',@searchString,
charindex(@searchForStartChars,@searchString,1)))
我想让它返回ST_Test001
由于
答案 0 :(得分:1)
你没有从substring
的长度中减去第一场比赛的起点:
declare @searchString varchar(max),
@searchForStartChars varchar(max)
set @searchString = 'My ST_Test001 testing blah'
set @searchForStartChars = 'ST_Test'
select SUBSTRING( @searchString
, charindex( @searchForStartChars, @searchString, 1 )
, charindex( ' '
, @searchString
, charindex( @searchForStartChars, @searchString, 1 )
)
- charindex( @searchForStartChars, @searchString, 1 )
)
我在substring
的最后一个参数中的当前代码之后添加了这个:
- charindex( @searchForStartChars, @searchString, 1 )
答案 1 :(得分:1)
这是另一个解决方案(因为我已经把时间放进去了,哈哈):
DECLARE @searchString VARCHAR(MAX),
@searchForStartChars VARCHAR(MAX),
@searchStringStartPos INTEGER;
SET @searchString = 'My ST_Test001 testing blah';
SET @searchForStartChars = 'ST_Test';
SET @searchStringStartPos = CHARINDEX(@searchForStartChars, @searchString, 1)
SELECT CASE
WHEN @searchStringStartPos = 0 THEN ''
ELSE CASE
WHEN CHARINDEX(' ', SUBSTRING(@searchString, @searchStringStartPos, LEN(@searchString)), 1) = 0 THEN SUBSTRING(@searchString, @searchStringStartPos, LEN(@searchString))
ELSE SUBSTRING(@searchString, @searchStringStartPos, CHARINDEX(' ', SUBSTRING(@searchString, @searchStringStartPos, LEN(@searchString)), 1) - 1)
END
END AS EntireSearchString;