在 h2 中实现 sybase datepart

implementing the sybase datepart in h2

我正在测试一个使用 sybase ASE 作为数据库的应用程序。

我们的代码使用了sybase中的datepart函数,例如这样:

select datepart(month, getdate());

我尝试使用这样的用户定义函数 (http://www.h2database.com/html/features.html#user_defined_functions) 来实现它:

public class SybaseSupport {
    public static String datePart(String input1, String input2) {
        return "";
    }
}

CREATE ALIAS DATEPART FOR "no.di.util.SybaseSupport.datePart";

但问题是日期部分的第一个参数只是简单的单词月份,没有任何形式的引号,所以 H2 认为我正在尝试访问某种列。

是否可以使用 H2 中的用户定义函数以某种方式实现此功能,或者我是否需要修补 H2 本身?

单词 'month' 在作为 datepart() 中的第一个参数出现(不带引号)时被识别为有效的 ASE 语法(并且有一系列相似的单词和缩写同样适用)。显然,这是一个特定于 ASE 的非 ANSI 构造,您不能指望不同的数据库以相同的方式运行。您需要找出目标数据库中的等效语法。

您可以使用 MONTH(getdate())。 这将适用于 H2 和 SQLServer。