Postgre开发 利用数组特性在多个数据源中匹配出对应值

在做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的作用

 如果大家有更好的方法,欢迎各位大佬指点、交流、学习

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值