【Hive】使用str_to_map代替过长的case when

问题描述:

在使用case when 解析身份证前2位户籍地址时,觉得语句太长了(占用行数较多)。

于是尝试使用“字典”的概念去替代,即通过str_to_map()将户籍信息写成KV的字典形式。

如:(户籍信息太长了,只列出部分)~

1. 使用case when 

select
    case substr(idcard,1,2)
            when '11' then '北京'
            when '33' then '浙江'
            when '46' then '海南'
            when '65' then '新疆'
            when '12' then '天津'
            when '34' then '安徽'
            when '50' then '重庆'
            when '71' then '台湾'
            when '13' then '河北'
            when '35' then '福建'
            when '51' then '四川'
            when '81' then '香港'
            when '14' then '山西'
            when '36' then '江西'
            when '52' then '贵州'
    else '其他' end as addr
from idcard_tab

2.str_to_map

select
str_to_map('11=北京&33=浙江&46=海南&65=新疆&12=天津&34=安徽&50=重庆&71=台湾&13=河北&35=福建&51=四川&81=香港&14=山西&36=江西&52=贵州', '&', '=')[substr(idcard,1,2)]
from idcard_tab

 

你可能感兴趣的:(数据库)