首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用JOOQ在postgres值表达式中应用强制转换

如何使用JOOQ在postgres值表达式中应用强制转换
EN

Stack Overflow用户
提问于 2021-04-27 01:36:24
回答 1查看 131关注 0票数 1

对于Postgres中的大型“in”条件,请执行以下操作

在(值(A),(B),(C))中

可能会导致比

在(a,b,c)中

在JOOQ中,我可以用

代码语言:javascript
复制
Field f = ...  
Row1[] rows = new Row1[array.length];
for (int i=0;i<array.length;i++)
    rows[i] = DSL.row(array[i]);
Condition c = f.in(DSL.selectFrom(DSL.values(rows)));

但如果我需要投出这些价值观呢?具体来说,当将值与citext列进行比较时,需要将其中至少一个值显式转换为citext,以使查询工作。示例:

代码语言:javascript
复制
select distinct "x0"."pk"
from "sometable" as "x0"
 where "x0"."external_shared_id" in ( values 
       ('ext0308174863'::citext),
     ('ext1560238348'))

我怎么用JOOQ写这个呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 19:03:47

目前还没有记录在案的方法来创建自定义数据类型,以便在强制转换中使用。您可以自己承担使用内部API的风险,我将在这里不对此进行文档说明。我创建了一个特性请求来创建这样的DataType引用:https://github.com/jOOQ/jOOQ/issues/11806

citext支持的显式特性请求如下:https://github.com/jOOQ/jOOQ/issues/5934

一如既往,当jOOQ不支持特定于供应商的功能时,普通SQL模板是您的朋友。。所以,就这么做吧:

代码语言:javascript
复制
rows[i] = row(field("{0}::citext", String.class, val(array[i])));

假设以下静态导入:

代码语言:javascript
复制
import static org.jooq.impl.DSL.*;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67275840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档