首页 > 解决方案 > 蜂巢喜欢 [0-9]

问题描述

我正在尝试编写一个 HIVE 案例语句,其中如果一个字段包含数字 8/9 作为第一个字符,第二个字符中包含 0-9 之间的任何数字,以及最后一个字段中 AE 之间的任何字母,它将删除它从字符串。

我拥有的代码(大部分)是:

Case When Substr(Upper(Trim(MBRCHR)),-3) like '9_A' or 
          Substr(Upper(Trim(MBRCHR)),-3) like '9_B' or
          Substr(Upper(Trim(MBRCHR)),-3) like '9_C' or
          Substr(Upper(Trim(MBRCHR)),-3) like '9_D' or
          Substr(Upper(Trim(MBRCHR)),-3) like '9_E' or
          Substr(Upper(Trim(MBRCHR)),-3) like '8_A' or 
          Substr(Upper(Trim(MBRCHR)),-3) like '8_B' or
          Substr(Upper(Trim(MBRCHR)),-3) like '8_C' or
          Substr(Upper(Trim(MBRCHR)),-3) like '8_D' or
          Substr(Upper(Trim(MBRCHR)),-3) like '8_E' or
    Then
        Substr(Upper(Trim(MBRCHR)),-3)
    Else
        Null
    end as DRVD,

我想要的(似乎不起作用)是

Case When Substr(Upper(Trim(MBRCHR)),-3) like '[8-9][0-9][A-E]'
       Then
          Substr(Upper(Trim(MBRCHR)),-3)
       Else
          Null
       end as DRVD,

输入值可能如下所示:

01512723290C
0151272329-C
ABC01199862590A
ABCD2642454890A

我正在寻找的输出是:

01512723290C      - 90C
0151272329-C      - Null
ABC01199862590A   - 90A
ABCD2642454890A   - 90A

标签: sqlhadoophive

解决方案


我想你想要一个正则表达式。根据您的代码

(Case When Substr(Upper(Trim(MBRCHR)),-3) rlike '^[8-9][0-9][A-E]$'
      Then Substr(Upper(Trim(MBRCHR)),-3)
 end) as DRVD,

我发现您的代码与描述不符。

Hive 中的正则表达式匹配使用rlikeor regexp(参见此处)。


推荐阅读