2017-03-09 113 views
1

我有我使用的返回值的查询:设置变量串本身查询

DECLARE @ VALUE varchar(1000) = 'ACELLA PHARMA [A200]' 
select 
    a.item_id, 
    attr_vals = concat(a.attr_val, ' ', quotename(b.attr_val)) 
from 
    ndc_attr as a 
    left outer join 
     [NDC_ATTR] b 
     on b.field_id = 144 
     and a.field_id = 225 
where 
    b.attr_val is not null 
    and b.attr_val like '%' [email protected] VALUE + '%' 

的事情是我需要的括号内的值:在这个例子A200。

我试图通过它添加一个if语句,打破了查询:

if @VALUE like '%[%' and @VALUE like '%]%' 
begin 
SET @VALUE = SUBSTRING(@VALUE, CHARINDEX('[', @VALUE) + 1, LEN(@VALUE) - 1) 
end 

但奇怪的是,完整的字符串将返回( 'ACELLA PHARMA [A200]')。

如何分解此值,使括号内的字符串位于@VALUE上?

+0

这可能有助于http://stackoverflow.com/questions/4021507/mysql-use-regex-to-extract-string-select-regex –

+0

谁删除了他们的答案,这是有帮助的!把它放回去! –

+0

我会恢复它,但戈登的更好在我看来...你应该使用他的。 – JiggsJedi

回答

2

如果你想在正方形中的部分括号值看的例子,那么这里是一条捷径:

select replace(stuff(@value, 1, charindex('[', @value), ''), ']','') 

我不知道该查询具有与办问题,但是当然,示例逻辑可以在查询中应用。

1

你近了......这应该做到。

declare @value varchar(max) 
set @value = 'ACELLA PHARMA [A200]' 

if charindex('[',@value)>0 and charindex(']',@value)>0 
begin 
    select @value=substring(@value, charindex('[', @value)+1, len(@value) - charindex('[', @value)-1) 
end 
select @value 
1

你想要做这样的事吗?

declare @value varchar(1000) = 'ACELLA PHARMA [A200]' 
declare @b_attr_val varchar(16); 
/* Gordon Linoff's answer here: */ 
set @b_attr_val= replace(stuff(@value, 1, charindex('[', @value), ''), ']',''); 

select 
    a.item_id 
    , attr_vals = concat(a.attr_val, ' ', quotename(b.attr_val)) 
from ndc_attr as a 
    left outer join [NDC_ATTR] b 
     on b.field_id = 144 
    and a.field_id = 225 
where b.attr_val = @b_attr_val;