我正在使用 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 吗?
我解决了它:DSL.jsonbGetElementAsText 生成运算符 ->>。谢谢!