【发布时间】:2020-01-02 13:11:39
【问题描述】:
我正在尝试使用 jOOQ SQL parser 解析 SQL 字符串。 SQL 包含这样的自定义函数:
select dateadd([*]'20190809', 'yyyymmdd', 1) from table1
它不能用任何方言解析。 我想获取选择字段并操作限制偏移子句。
有什么办法可以做到吗?
【问题讨论】:
-
您使用的是哪种 SQL 方言(RDBMS 供应商)?
我正在尝试使用 jOOQ SQL parser 解析 SQL 字符串。 SQL 包含这样的自定义函数:
select dateadd([*]'20190809', 'yyyymmdd', 1) from table1
它不能用任何方言解析。 我想获取选择字段并操作限制偏移子句。
有什么办法可以做到吗?
【问题讨论】:
有点标准的 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。
【讨论】: