我正在尝试编写一个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
答案 0 :(得分:1)
我想你想要一个正则表达式。基于您的代码:
(Case When Substr(Upper(Trim(MBRCHR)),-3) rlike '^[8-9][0-9][A-E]$'
Then Substr(Upper(Trim(MBRCHR)),-3)
end) as DRVD,
我发现您的代码与描述不符。
Hive中的正则表达式匹配使用rlike
或regexp
(请参阅here)。