gpt4 book ai didi

java - jooq 中的 Case When 语法表达式

转载 作者:行者123 更新时间:2023-11-30 06:27:20 25 4
gpt4 key购买 nike

我正在尝试在 jooq 中重现此 MySQL 查询

select case     
when year(d.date) - p.birth_year < 5 then '<5'
else '5+'
end as age
from partners p join departure d on d.id = p.id

this.schema().select(
DSL.decode().value(dateDiff(p.BIRTHDATE , date(d.DATE)))
.when(greaterThan(5), "above 5")
.when(lessThan(5), "under 5")
.otherwise("unknown").as("age"),
.from(p)
.join(d).on(d.ID.eq(p.ID))

最佳答案

您似乎正在寻找的是 SQL:2003 简单的 CASE 表达式,它允许根据 case 值形成类似“部分谓词”的内容,类似于其他语言中的模式匹配。 jOOQ 尚不支持此功能,请参阅Issue #3223 .

有趣的是,您的 SQL 示例并未使用此语法,也不符合您建议的 jOOQ API 用法。我怀疑您想使用此语法来避免重复减法两次。这也可以在 SQL 中按如下方式完成:

select 
case sign(year(d.date) - p.birth_year - 5)
when -1 then '<5'
when 0 then '5+'
when 1 then '5+'
else 'unknown' end AS age
from partners p join departure d on d.id = p.id

这将转化为:

Partners p = PARTNERS.as("p");
Departure d = DEPARTURE.as("d");

using(configuration)
.select(choose(sign(year(d.DATE).minus(p.BIRTH_YEAR).minus(5)))
.when(inline(-1), val("<5"))
.when(inline( 0), val("5+"))
.when(inline( 1), val("5+"))
.otherwise(inline("unknown"))
.as("age"))
.from(p)
.join(d).on(d.ID.eq(p.ID))
.fetch();

此静态导入是隐含的:

import static org.jooq.impl.DSL.*;

关于java - jooq 中的 Case When 语法表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46905640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com