关键字后修剪字符串

时间:2014-12-18 19:41:36

标签: sql sql-server sql-server-2012

我有一个包含状态更改的列,但我不想返回整个字符串。有没有办法在某个关键字后返回一个字符串的一部分?列的每个值都是从From X到Y的格式,其中X和Y可以是单个单词或多个单词。我查看了substringtrim函数,但这些函数似乎需要了解您想要保留多少空格。

编辑:我希望将Y部分保留在状态中并摆脱“从X到'

”。

3 个答案:

答案 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'