在做SQL开发时候,经常会遇到多个判断条件的场景,一般都是采用case when...进行操作,但是这样写只能应付少量的逻辑判断场景。如果需要判断的数据源为多个,我们则需要采用更为方便灵活的方式,比如采用数组...
需求:由于实际业务条件,现需要增加库位简称列,要求在现有的收获地点进行判断。例如:小黑子公司青岛售货仓,则需要取出‘青岛’作为我们的库位简称
直接上sql
select
(select
element
from
unnest(array['贵阳','昆明','青岛',
'宁波','漂河','长春',--所有需要匹配的数据
'兰州','天津','沈阳',
'北京','合肥','潍坊'
'深圳','重庆','临沂',
'太原','南宁','福州',
'南昌','济南','南京',
'顺德','湖州','长沙'])As element
where locName ~ element
limit 1
)AS matched,locName
from dw.tableName
where
loadDt=current_date
解释:
1、array 创建数组
2、unnest 数组行转列函数
3、where locName ~ element 正则匹配方式
我们创建一个数据(放入所有需要匹配的数据)通过unnest把我们的行数据转为列数据B,拿出需要匹配的列A进行正则判断。
即:A~B 数据A列从第一行开始匹配B列所有行,如果匹配到数据则返回第一行,也就limit的作用
如果大家有更好的方法,欢迎各位大佬指点、交流、学习