【问题标题】:How to use toChar function in JOOQ?如何在 JOOQ 中使用 toChar 函数?
【发布时间】:2013-11-20 06:26:29
【问题描述】:

我必须在JOOQ 中使用toChar() 函数吗?现在我使用了下面的代码

 TO_CHAR(PaymentDate, 'YYYY-MM-DD') <= TO_CHAR(SYSDATE,'YYYY-MM-DD')");

我必须将其转换为 JOOQJOOQ这个怎么用?

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    jOOQ 3.2 未明确支持 Oracle 的 TO_CHAR() 函数。我为此添加了一个功能请求:#2832

    与此同时,您将不得不求助于纯 SQL as documented in the manual。例如,你可以写:

    // Create reusable fields:
    Field<String> f = DSL.field(
        "TO_CHAR({0}, 'YYYY-MM-DD')", String.class, T.PaymentDate);
    
    // Create reusable conditions:
    Condition c = DSL.condition(
        "TO_CHAR({0}, 'YYYY-MM-DD') <= TO_CHAR(SYSDATE, 'YYYY-MM-DD')", 
        T.PaymentDate);
    

    请注意,{0} 是对 DSL.condition(String, QueryPart...) 的第一个 QueryPart 参数的引用。

    【讨论】:

    • TO_CHAR 没有进入 jOOQ 3.3。功能请求已移至github.com/jOOQ/jOOQ/issues/3064
    • @Thilo:从技术上讲,这是一个不同的功能请求。我们当时已经实现了OracleDSL.toChar()……但你是对的——从与方言无关的角度来看,jOOQ 中仍然缺少该功能。我们将不得不进行调查并花一些时间来了解所有数据库供应商如何支持此功能
    • 就我而言,我需要 H2.formatDateTime。简单的 SQL 解决方法效果很好,谢谢。 (并且 formatDateTime 本身是 H2 缺少支持将日期截断为一个月的一种解决方法,也许日期截断比通用 toChar 功能更容易在供应商之间实现。我想你可以将非常复杂的东西放入该格式字符串中)。跨度>
    • @Thilo:复杂性可能并不重要。我们还支持正则表达式谓词,其语法为very different flavours across vendors。在这些情况下,我们只关心参数语义,而不是内容。 DSL.trunc(date, datePart) 目前不支持 H2 日期截断。我已注册 #3781 以提醒 jOOQ 3.6 效仿这一点
    • 嘿,我现在在 Jooq 3.11 中运行,是否添加了此功能?
    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 2020-10-02
    • 1970-01-01
    • 2020-09-25
    • 2019-12-27
    • 2017-01-24
    • 2020-06-25
    • 2018-10-20
    相关资源
    最近更新 更多