PostgreSQL WHERE IN子句
我试图在PostgreSql的子句中使用split_part,如下所示。这里,Objcode是small int类型,objective可能类似于PostgreSQL WHERE IN子句,postgresql,Postgresql,我试图在PostgreSql的子句中使用split_part,如下所示。这里,Objcode是small int类型,objective可能类似于137482448032873286%Custom objective 但是查询在abj列中返回null SELECT o.objection, TO_CHAR(o.obj_redate,'DD-MM-YYYY') AS objection_date, o.srno, (SELECT string_agg(objtype,'<br/>')
137482448032873286%Custom objective
但是查询在abj列中返回null
SELECT o.objection,
TO_CHAR(o.obj_redate,'DD-MM-YYYY') AS objection_date, o.srno,
(SELECT string_agg(objtype,'<br/>') FROM objection_t
WHERE objcode IN (split_part(o.objection,'%',1))) as obj
FROM objection_history o
反对
**objcode** **objtype**
1 objection name
2 vjlbhjdhbldhb
3 bgbrbgrbnrb
您的查询基本上会将单个字符串常量传递给
in
运算符:
WHERE objcode IN ('1374,824,480,3287,3286')
一旦从输入中删除了%自定义异议
,则需要将单个字符串值转换为多个值。最简单的方法可能是将其转换为数组
WHERE objcode = ANY ( string_to_array(split_part(o.objection,'%',1), ',')::smallint[] )
string\u数组
返回一个text[]
,因此需要将其转换为正确的整数数组
将逗号分隔的值存储在列中是一个非常糟糕的设计选择。如果可能,您应该规范化您的数据模型您的查询基本上会将单个字符串常量传递给中的操作符:
WHERE objcode IN ('1374,824,480,3287,3286')
一旦从输入中删除了%自定义异议
,则需要将单个字符串值转换为多个值。最简单的方法可能是将其转换为数组
WHERE objcode = ANY ( string_to_array(split_part(o.objection,'%',1), ',')::smallint[] )
string\u数组
返回一个text[]
,因此需要将其转换为正确的整数数组
将逗号分隔的值存储在列中是一个非常糟糕的设计选择。如果可能,您应该规范化数据模型我们至少需要表定义、样本数据和预期输出。我已经编辑了我的问题,请检查将多个值存储为逗号分隔的字符串是一个非常糟糕的主意。更重要的是,如果您混合使用不同的类型,那么更谨慎的做法是更改表并添加一个新列以将该部分放入,因为您在一列中混合了两种数据类型。我们至少需要表定义、示例数据和预期输出。我已经编辑了我的问题,请检查将多个值存储为逗号分隔的字符串是一个非常糟糕的主意。更重要的是,如果您混合使用不同的类型,那么更谨慎的做法是更改表并添加一个新列以将该
%
部分放入,因为您在一列中混合了两种数据类型。