作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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/
我是一名优秀的程序员,十分优秀!