gpt4 book ai didi

PostgreSQL WHERE IN 子句

转载 作者:行者123 更新时间:2023-11-29 14:34:35 28 4
gpt4 key购买 nike

我正在尝试在 PostgreSql 的 WHERE IN 子句中使用 split_part,如下所示。这里 Objcode 是 small int 类型,objection 可能像 1374,824,480,3287,3286%Custom objection但是查询在 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

反对历史

**fil_no**    **objection**                **obj_date**
1 1,2,4%some custom obj 2017-01-01
2 5,6,300%nsnvnv 2017-01-02
3 5 2017-01-02

反对_t

    **objcode**                 **objtype**
1 objection name
2 vjlbhjdhbldhb
3 bgbrbgrbnrb

最佳答案

您的查询本质上导致将一个单个 字符串常量传递给IN 运算符:

WHERE objcode IN ('1374,824,480,3287,3286')

从输入中删除 %Custom objection 后,您需要将该单个字符串值转换为多个值。最简单的方法可能是将其转换为数组。

WHERE objcode = ANY ( string_to_array(split_part(o.objection,'%',1), ',')::smallint[] )

string_array 返回一个 text[],因此您需要将其转换为正确的整数数组。


像在列中那样存储逗号分隔值是非常糟糕的设计选择。如果可能,您应该规范化您的数据模型

关于PostgreSQL WHERE IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069623/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com