我有一个包含状态更改的列,但我不想返回整个字符串。有没有办法在某个关键字后返回一个字符串的一部分?列的每个值都是从From X到Y的格式,其中X和Y可以是单个单词或多个单词。我查看了substring
和trim
函数,但这些函数似乎需要了解您想要保留多少空格。
编辑:我希望将Y部分保留在状态中并摆脱“从X到'
”。答案 0 :(得分:2)
您可以使用Charindex和Substring和Len的组合来完成它。
试试这个:
select SUBSTRING(field,charindex('keyword',field), LEN('keyword'))
所以这将找到翻牌并将其提取到现场的任何地方
select SUBSTRING('bullflop',charindex('flop','bullflop'), LEN('flop'))
编辑:
要获得余数,只需将LEN设置为字段LEN(field)
declare @field varchar(200)
set @field = 'this is bullflop and other such junk'
select SUBSTRING(@field,charindex('flop',@field), LEN(@field) )
编辑2:
现在我明白了,这是一个快速而又脏的版本......
declare @field varchar(200)
set @field = 'From X to Y'
select Replace(SUBSTRING(@field,charindex('to ',@field), LEN(@field) ), 'to ','')
返回:
Y
编辑3:
科里是对的,这更清洁了。
declare @field varchar(200) = 'From X to Y'
declare @keyword varchar(200) = 'to '
select SUBSTRING(@field,charindex(@keyword,@field) + LEN(@keyword), LEN(@field) )
答案 1 :(得分:2)
其他答案都很好,但我喜欢STUFF()
函数,它似乎并不为人所熟知,所以这里有另一种选择:
DECLARE @field VARCHAR(50) = 'From Authorized to Auth Not Needed'
,@keyword VARCHAR(50) = ' to '
SELECT STUFF(@field,1,CHARINDEX(@keyword,@field)+LEN(@keyword),'')
STUFF()
就像SUBSTRING()
和REPLACE()
一样,您可以为它提供一个字符串,一个起始位置和一个长度,并且可以用任何内容替换它,或者在您的情况下,没有''
STUFF ( character_expression , start , length , replaceWith_expression )
1}}。
来自MSDN:
{{1}}
答案 2 :(得分:0)
您可以组合几个字符串函数来执行您想要的操作:
DECLARE @Field varchar(100) = 'From A to Z'
DECLARE @Keyword varchar(100) = 'to'
-- Method 1 (Find the keyword, then take the remainder of the string)
SELECT LTRIM(SUBSTRING(@Field,
CHARINDEX(@Keyword, @Field, 0) + LEN(@Keyword), LEN(@Field)))
修改强>:
-- Method 2 (Take from the right the characters up to the keyword)
SELECT RIGHT(@Field, LEN(@Field) - CHARINDEX(@Keyword, @Field, 0) - LEN(@Keyword))
产地:
'Z'