Улей, как [0-9] - PullRequest
       33

Улей, как [0-9]

0 голосов
/ 04 мая 2018

Я пытаюсь написать заявление о случае ВИЧE, в котором если поле содержит либо число 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

1 Ответ

0 голосов
/ 04 мая 2018

Я думаю, вы хотите регулярное выражение. На основании вашего кода :

(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 (см. здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...