2017-03-09 62 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;