【问题标题】:how to use where + like IN in impala如何在impala中使用where + like IN
【发布时间】:2022-01-22 00:02:18
【问题描述】:

我想在 where 语句中使用 like 并使用类似 test 的列表:

select * 
FROM mydb.my_table.K
WHERE K.myid LIKE IN ('AT%', 'BEL%' , 'DDCY%')

这不起作用,但这样做:

select * 
FROM mydb.my_table.K
WHERE (K.myid LIKE 'AT%' OR K.myid LIKE'BEL%' OR K.myid LIKE 'DDCY%')

【问题讨论】:

    标签: sql impala


    【解决方案1】:

    您的第一个 SQL 在语法上是正确的,但它不会按逻辑工作。第二个 SQL 可以解决问题,但速度很慢,如果您有很多参数,这可能是个问题。

    很遗憾,您不能在列表中使用参数,但您可以使用 rlikeregexp_like 来解决问题。

    select * 
    FROM mydb.my_table.K
    WHERE K.myid RLIKE '^AT|^BEL|^DDC'
    

    请注意这是一个正则表达式,^ 表示字符串的开头,| 连接所有模式参数。

    【讨论】:

      【解决方案2】:

      您是否考虑过使用 STRLEFT?

      select * 
      FROM mydb.my_table.K
      WHERE STRLEFT(K.myid,2) IN ('AT', 'BE' , 'CY')
      

      【讨论】:

      • 不错的工作,但它可能无法很好地推广到更复杂的字符串模式,所以我将把这个问题留待一下
      • 两者都不是 LIKE。 FWIW,我不认为存在允许你做你想做的事情的语法。 LIKE 用于比较字符串。 IN 用于检查集合中的存在。如果您一心想要使用 LIKE,您将需要动态构建该 WHERE 子句。上面列出的解决方案的唯一问题是,它现在只处理前两个字符。您之前从未提及的“更复杂的字符串模式”将是额外的 OR 子句。 stackoverflow.com/questions/3014940/…
      • 我不这样做,这将工作 `'CY'` 来寻找模式DDCY%
      猜你喜欢
      • 2016-10-30
      • 2014-03-03
      • 2016-05-21
      • 1970-01-01
      • 2013-11-24
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多