gpt4 book ai didi

java - 尝试(但失败)为 H2 数据库创建用户函数

转载 作者:行者123 更新时间:2023-11-29 07:27:35 25 4
gpt4 key购买 nike

我们的主要数据库是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)

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

关于java - 尝试(但失败)为 H2 数据库创建用户函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34003424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com