postgresql将多个相同的条件统一为一个参数
我有一个sql需要将字符串列转换为数组,我必须使用此列进行筛选,sql如下:postgresql将多个相同的条件统一为一个参数,sql,postgresql,Sql,Postgresql,我有一个sql需要将字符串列转换为数组,我必须使用此列进行筛选,sql如下: 选择 母系, 字符串到数组(父行“-”) 从…起 bx_客户关系管理部 哪里 状态=0和 “851”=任意(字符串到数组(父行“-”)和 数组长度(字符串到数组(父行“-”),1)=5; parent\u line是一个varchar(50)列,其中的数据类似于0-1-851-88 问题: 字符串到数组(父行“-”)在我的sql中多次出现 在每行中计算字符串到数组(父行)的次数。一次或三次 如何将字符串\u转换为\u
选择
母系,
字符串到数组(父行“-”)
从…起
bx_客户关系管理部
哪里
状态=0和
“851”=任意(字符串到数组(父行“-”)和
数组长度(字符串到数组(父行“-”),1)=5;
parent\u line
是一个varchar(50)列,其中的数据类似于0-1-851-88
问题:
字符串到数组(父行“-”)
在我的sql中多次出现
字符串\u转换为\u数组(父\u行)
转换为参数。最后,我的sql可能是这样的:depts=字符串到数组(父行“-”)
选择
母系,
部门
从…起
bx_客户关系管理部
哪里
状态=0和
“851”=任何(部门)和
数组长度(depts,1)=5;
使用派生表:
select *
from (
select parent_line,
string_to_array(parent_line, '-') as parents,
status,
... other columns ...
from bx_crm.department
) x
where status = 0
and cardinality(parents) = 5
and '851' = any(parents)
Postgres支持横向连接,可简化此逻辑:
select parent_line, v.parents, status, ... other columns ...
from bx_crm.department d cross join lateral
(values (string_to_array(parent_line, '-')) v(parents)
where d.status = 0 and
cardinality(v.parents) = 5
'851' = any(v.parents)