尝试(但失败)为 H2 数据库创建用户函数
Attempting (and failing) to create user function for H2 database
我们的主数据库是MySQL。
很少有查询使用相当常见的 DATE_SUB($date, INTERVAL $duration $type)
。
我们正在 运行 对 H2 数据库进行测试,缺少 DATE_SUB()
函数会造成问题。
我们有一个想法,即创建一个用户 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 决定添加对 INTERVAL 数据类型的支持(它在他们的待办事项列表中)
看来目前唯一的选择是使用替代功能:
目前
TIMESTAMPADD(unquotedPeriodName, -1, :date)
提供非常相似的功能,所以这就是我将要使用的功能。
我们的主数据库是MySQL。
很少有查询使用相当常见的 DATE_SUB($date, INTERVAL $duration $type)
。
我们正在 运行 对 H2 数据库进行测试,缺少 DATE_SUB()
函数会造成问题。
我们有一个想法,即创建一个用户 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 决定添加对 INTERVAL 数据类型的支持(它在他们的待办事项列表中)
看来目前唯一的选择是使用替代功能:
目前
TIMESTAMPADD(unquotedPeriodName, -1, :date)
提供非常相似的功能,所以这就是我将要使用的功能。