【问题标题】:Jooq replace functionJooq 替换功能
【发布时间】:2019-08-17 00:54:49
【问题描述】:

当我使用 JOOQ 生成我的原始 SQL 时,我看到了一个奇怪的行为。

    CAST(addi.addke AS VARCHAR(10))||CAST(tlcst.tdsk AS
            VARCHAR(10))||date_format(DATE (rol.ntbd), '%Y%m%d')||replace(adft.ati,':','')  SPOT_ID,

我为上述 SQL 创建了一个 JOOQ 脚本

concat((field("addi.addke").cast(SQLDataType.VARCHAR(10))),
                    (field("tlcst.tdsk").cast(SQLDataType.VARCHAR(10))),
                    (dateFormat(field("rol.ntbd"), "%Y%m%d")),
                    (replace(field("adft.ati", String.class), ":", ""))).as(field("SPOT_ID")))

它生成如下 SQL,在替换函数上有 ? 符号。

(
cast(addi.addke as varchar(10)) || cast(tlcst.tdsk as varchar(10)) || date_format(rol.ntbd, '%Y%m%d') || replace(adft.ati, ?, ?)) as "SPOT_ID"

我怎么不能在替换功能中获得那些? 标记?

谢谢

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    我用替换功能解决了上述问题

    concat((field("addi.arr").cast(SQLDataType.VARCHAR(10))),
                        (field("tlcst.tee").cast(SQLDataType.VARCHAR(10))),
                        (dateFormat(date("rol.hhh"), "%Y%m%d")),
                        (replace(field("adft.jjj", String.class), field("':'", String.class), field("''", String.class)))).as(field("SPOT_ID")))
    

    【讨论】:

      【解决方案2】:

      默认情况下,jOOQ 将所有变量包装为绑定变量,这类似于在后台调用 DSL.val()。您想在特定情况下内联这些值,因此您必须改用DSL.inline()。因此,请致电:

      replace(field("adft.ati", String.class), inline(":"), inline(""))
      

      For more details about bind values, please refer to the manual.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-18
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        相关资源
        最近更新 更多