我有一个 postgres 数据库表,其中许多列之一定义为
supported_currencies JSON NOT NULL DEFAULT '["USD"]'::JSON
在普通 SQL 中,我可以如下查询该表
select * from <db_table> where supported_currencies::text in ('["USD"]', '["AUD"]', '["EUR"]')
我正在尝试使用jooq的功能来实现这一点,我一直在探索和尝试一些东西,到目前为止还没有帮助。
我不会先将查询转换为
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();
SQLDataType.CLOB
对应于 PostgreSQL 的 text
类型。或者,你也可以使用SQLDataType.VARCHAR
,应该没有关系。