【问题标题】:How to parser SQL string with self defined functions using jOOQ?如何使用 jOOQ 使用自定义函数解析 SQL 字符串?
【发布时间】:2020-01-02 13:11:39
【问题描述】:

我正在尝试使用 jOOQ SQL parser 解析 SQL 字符串。 SQL 包含这样的自定义函数:

select dateadd([*]'20190809', 'yyyymmdd', 1) from table1

它不能用任何方言解析。 我想获取选择字段并操作限制偏移子句。

有什么办法可以做到吗?

【问题讨论】:

  • 您使用的是哪种 SQL 方言(RDBMS 供应商)?

标签: java sql jooq


【解决方案1】:

有点标准的 DATEADD() 函数(在某些 SQL 方言中为 DATE_ADD())采用多种不同的形式,具体取决于特定的 SQL 方言。

jOOQ 的 SQL 解析器目前仅支持以下变体之一:DATEADD(<datepart>, <interval>, <date>),它对应于 SQL Server(以及其他一些方言)中的语法。

应用于您的示例(假设您想添加一天)这将是:

select dateadd(DAY, 1, date '2019-08-09') from table1

请注意,'20190809' 在大多数方言中不是正确的日期文字,这就是我将其替换为 date '2019-08-09' 的原因。

另外请注意,您可以使用jOOQ translator 来玩弄这些东西。

假设您有自己的用户定义的存储过程,也称为DATEADD,那么您确实不走运,因为 jOOQ 的解析器会尝试按上述方式解析表达式。使用任何其他名称(例如DATEADD1)jOOQ 的解析器在解析这个表达式时不会有任何问题。但是,您可能想要配置 jOOQ 应该如何deal with unknown functions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2014-05-28
    • 2023-04-02
    • 1970-01-01
    • 2019-09-18
    • 2020-02-21
    相关资源
    最近更新 更多