【问题标题】:Using CONTAINS with variables sql将 CONTAINS 与变量 sql 一起使用
【发布时间】:2014-07-18 17:04:48
【问题描述】:

好的,所以我试图在 SQL 中用另一个变量引用一个变量。

X= a,b,c,d(x 是一个字符串变量,里面有一个东西的列表)

Y= b (Y 是一个字符串变量,可能有也可能没有出现在 X 中的值)

我试过了:

Case when Y in (X) then 1 else 0 end as aa

但它不起作用,因为它会寻找 X 和 Y 之间的完全匹配

也试过这个:

where contains(X,@Y)  

但我无法全局创建 Y,因为它是一个在表格的每一行中都会发生变化的变量。(x 也会发生变化)

SAS 中的解决方案也很有用。 谢谢

【问题讨论】:

    标签: sql sql-server sas contains


    【解决方案1】:

    也许like 会有所帮助

    select 
      *
    from
      t
    where
      X like ('%'+Y+'%')
    

    select 
      case when (X like ('%'+Y+'%')) then 1 else 0 end
    from
      t
    

    SQLFiddle example

    【讨论】:

    • 注意这个问题:你正在寻找123,而你的列表是222,1234,444,这个查询会错误地找到它。
    • @KM。你是对的,解决方法是搜索 123, 取决于数据。
    【解决方案2】:

    在 SAS 中,我会在数据步骤或 proc sql 中使用 INDEX 函数。这将返回在字符串中找到字符的位置,如果没有匹配则返回零。因此,如果返回的值大于零,则测试将导致二进制 1:0 输出。您需要对包含搜索字符的变量使用 compress 函数,因为 SAS 用空格填充值。

    数据步解决方案:

    aa=index(x,compress(y))>0;
    

    Proc Sql 解决方案:

    index(x,compress(y))>0 as aa
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2014-09-05
      • 2011-09-16
      • 1970-01-01
      • 2013-07-01
      • 2015-01-30
      相关资源
      最近更新 更多