【问题标题】:Setting variable to substring of itself for query将变量设置为自身的子字符串以进行查询
【发布时间】:2017-07-30 23:35:30
【问题描述】:

我有一个用于返回值的查询:

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 上?

【问题讨论】:

  • 这可能会有所帮助stackoverflow.com/questions/4021507/…
  • 谁删除了他们的答案,这很有帮助!放回去!
  • 我会恢复它,但我认为 Gordon 的更好......你应该使用他的。

标签: sql sql-server


【解决方案1】:

如果您想要 square 大括号中的部分 并且 的值看示例,那么这里是一个快捷方式:

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

我不确定查询与问题有什么关系,但示例逻辑当然可以应用于查询。

【讨论】:

    【解决方案2】:

    你很接近......这应该可以做到。

    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
    

    【讨论】:

      【解决方案3】:

      您是否正在尝试做这样的事情?

      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;
      

      【讨论】:

        猜你喜欢
        • 2021-03-04
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        • 1970-01-01
        相关资源
        最近更新 更多