Java 正在尝试(但失败)为H2数据库创建用户函数

Java 正在尝试(但失败)为H2数据库创建用户函数,java,mysql,h2,Java,Mysql,H2,我们的主要数据库是MySQL 很少有查询使用相当常见的DATE\u SUB($DATE,INTERVAL$duration$type) 我们正在H2数据库上运行测试,缺少DATE\u SUB()函数会产生问题。 我们有一个想法,创建一个user H2函数来复制MySQL行为——我有两次尝试,两个实现都存在,并且分别映射 CREATE ALIAS IF NOT EXISTS DATE_SUB FOR "xxx.yyy.Zzz.dateSubtract"; public Zzz {

我们的主要数据库是MySQL

很少有查询使用相当常见的
DATE\u SUB($DATE,INTERVAL$duration$type)

我们正在H2数据库上运行测试,缺少
DATE\u SUB()
函数会产生问题。
我们有一个想法,创建一个user H2函数来复制MySQL行为——我有两次尝试,两个实现都存在,并且分别映射

    CREATE ALIAS IF NOT EXISTS DATE_SUB FOR "xxx.yyy.Zzz.dateSubtract";

public Zzz {
        ...
        public static Date dateSubtract(Connection connection, String dateValue, String formula) {
            return dateSubtractJava(dateValue, formula);
        }

        public static Date dateSubtract(Connection connection, String dateValue, String INTERVAL, String numberOfDateIntervals, String dateIntervalName) {
            return dateSubtractJava(dateValue, INTERVAL, numberOfDateIntervals, dateIntervalName);
        }
        ...
}
不幸的是,我的尝试失败了:

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement 
...  
DATE_SUB(?, INTERVAL 1[*] DAY)  
expected "., (, [, ::, *, /, %, +, -, ||, ~, !~, NOT, LIKE, REGEXP, IS, IN, BETWEEN, AND, OR, ), ,";
看起来H2甚至没有尝试使用我的用户函数,但在尝试解析SQL语句时失败了


有人成功地做了那样的事吗

供将来参考,直到H2决定添加对间隔数据类型的支持(它在他们的待办事项列表中)

目前唯一的选择似乎是使用其他功能:
此刻

TIMESTAMPADD(unquotedPeriodName,-1,:date)


提供非常相似的功能,所以这就是我将要使用的

您是否从命令行测试了该功能?如果是这样,您是否使用其中的
[*]
对其进行了测试(或者解析器是否为您添加了此项?)语法错误发生的地方。@ThomasMueller:我是否正确理解,由于H2无法识别
INTERVAL
数据类型,除了使用另一个函数外,我们无法执行任何操作?您需要使用不同的数据类型而不是INTERVAL。