2017-03-09 5 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; 
関連する問題