postgre中一些复杂的字符串与数组操作用法(含数组like)

首先提供测试数据:

字符串:  'CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6'

 -- param表中的字段val的值是逗号分割的字符串 CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6
SELECT * from unnest(ARRAY['foo','bar','baz']);  --将数组 ['foo','bar','baz'] 转成3行数据
SELECT string_agg(val, ',') from param ; --将CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6转成 字符串数组
select unnest(string_to_array( val, ',' ))  from param ; --将CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6转成 字符串数组 再转成3行数据

select SPLIT_PART(val, ',', 1)  from param ; --获取  CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6 中第一个逗号之前的数据,也就是返回  CP-A-11-9-4
select SPLIT_PART(val, '-', 2)  from param where code=6; --获取val(CP-A-11-9-4)中第2个横杆'-'之前的数据(之前有横杆就截至横杆,没有横杆就截取前面所有字符),也就是返回 A

select substring('sd2sds22ds',1,4); --sd2s 从第一位开始截取,共截取4位
select substring('Thomas' from 2 for 3); --从第2位数开始截3位数

select position('IC' in 'CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6'); --IC在字符串中的 下标,以1开头

select 'foo' = ANY(ARRAY['foo','bar','baz']); --判断数组中是否包含 'foo' ,  定义数组:ARRAY['foo','bar','baz']


select SPLIT_PART(v, '-', 2) as da  from (
	select unnest(string_to_array( val, ',' )) v  from param where code=6 
)a where a.v like '%TH%' --将货架参数使用逗号分割成数组,再用unnest转成3行数据 ,再把符合like'TH'的值是'TH-A-1-1',截取第二个横杆前面的值(遇到第一个横杆就结束截取),也就是返回A


--code=6的val返回的是'CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6',转数组后再使用unnest转成3条数据后,截取第一个横杆之前的数据,也就是返回3条数据CP , IC, TH
select SPLIT_PART(unnest(string_to_array( val, ',' )), '-', 1) v  from param where code=6 ;


select *  from (
	select 
		SPLIT_PART(unnest(string_to_array( val, ',' )), '-', 1) v , --转数组后再使用unnest转成3条数据后,截取第1个横杆之前的数据
		SPLIT_PART(unnest(string_to_array( val, ',' )), '-', 2) da  --转数组后再使用unnest转成3条数据后,截取第2个横杆之前(截至到第1个横杆)的数据
	from param where code=6  --code=6的val返回的是'CP-A-11-9-4,IC-B-8-8-8,TH-C-3-8-6'
)a where 'CP仓库' like '%'|| a.v||'%'; 
/*like之前返回3条数据:
	CP | A 
	IC | B
	TH | C  
	匹配like之后返回的是 CP | A这条数据
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事不堪回首..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值