我有一个用于返回值的查询:
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 '%' +@ 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 :(得分:2)
如果您希望 square 中的部分括号和值看示例,那么这是一个快捷方式:
select replace(stuff(@value, 1, charindex('[', @value), ''), ']','')
我不确定查询与问题有什么关系,但当然可以在查询中应用示例逻辑。
答案 1 :(得分: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
答案 2 :(得分: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;