JOOQ 查询,将 jsonb 元素与 Postgres 上的忽略大小写进行比较

问题描述 投票:0回答:1

我正在使用 Jooq 3.18 和 Postgres 14。

我有一个 Jsonb 列,其中包含一个字符串数组,例如

["A","B"]
。 我想检查 where 子句中的第一个元素是否等于(忽略大小写)“a”。

如果我在Jooq中使用以下条件

DSL.jsonbGetElement(MY_TABLE.MY_JSONB_COLUM,0).equalIgnoreCase("a")

然后我没有得到任何结果。 原始查询看起来像

lower(cast(("my_schema"."my_table"."my_jsonb_column"->0) as varchar)) = lower('a')

强制转换破坏了查询。

如果我使用 containsIgnoreCase,那么我会得到结果。但也有错误的匹配。

DSL.jsonbGetElement(MY_TABLE.MY_JSONB_COLUMN, 0).containsIgnoreCase(JSONB.valueOf(JSONValue.toJSONString("a")

仅供参考,生成的查询如下所示:

cast(("my_schema"."MY_TABLE"."MY_JSONB_COLUMN"->0) as varchar) ilike (('%' || cast('"a"' as varchar)) || '%') escape '!'

有人知道我如何使用 Jooq 执行 equalsIgnoreCase 吗?

postgresql jooq jsonb
1个回答
0
投票

我解决了它:DSL.jsonbGetElementAsText 生成运算符 ->>。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.