尝试(和失败)为H2数据库创建用户功能

时间:2015-11-30 16:35:09

标签: java mysql h2

我们的主要数据库是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语句时失败了。

有没有人设法成功做到这一点?

1 个答案:

答案 0 :(得分:2)

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

目前似乎唯一的选择是使用替代功能:
目前

TIMESTAMPADD(unquotedPeriodName, -1, :date)

提供非常类似的功能,因此我将使用它。