在 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。
我正在测试一个使用 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。