如何在 jooq 的 where 子句中使用 postgres json 列

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

我有一个 postgres 数据库表,其中许多列之一定义为

supported_currencies JSON NOT NULL DEFAULT '["USD"]'::JSON

在普通 SQL 中,我可以如下查询该表

select * from <db_table> where supported_currencies::text in ('["USD"]', '["AUD"]', '["EUR"]')

我正在尝试使用jooq的功能来实现这一点,我一直在探索和尝试一些东西,到目前为止还没有帮助。

java postgresql jooq
1个回答
0
投票

我不会先将查询转换为

text
,而是这样做:

ctx.selectFrom(DB_TABLE)
   .where(DB_TABLE.SUPPORTED_CURRENCIES.in(
       json("[\"USD\"]"), 
       json("[\"AUD\"]"), 
       json("[\"EUR\"]")
   ))
   .fetch();

这是使用

JSON.json(String)
(假设您确实使用的是
JSON
,而不是
JSONB
,尽管答案是等效的)。

如果由于某种原因你确实需要进行文本比较,只需使用 jOOQ 进行转换:

ctx.selectFrom(DB_TABLE)
   .where(DB_TABLE.SUPPORTED_CURRENCIES.cast(CLOB).in(
       "[\"USD\"]", 
       "[\"AUD\"]", 
       "[\"EUR\"]"
   ))
   .fetch();

jOOQ 的

SQLDataType.CLOB
对应于 PostgreSQL 的
text
类型。或者,你也可以使用
SQLDataType.VARCHAR
,应该没有关系。

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