当我使用MySql数据库作为我的webproject时,如果我运行查询SELECT Date(now())
给我当前日期。
最近在运行某些单元测试时,我决定使用内存中H2 database
来获得更好的性能。现在如果我使用查询SELECT Date(now())
,它会给我以下错误
org.h2.jdbc.JdbcSQLException: Function "DATE" not found; SQL statement:
SELECT Date(now()) [90022-178]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
at org.h2.message.DbException.get(DbException.java:178)
at org.h2.message.DbException.get(DbException.java:154)
at org.h2.command.Parser.readJavaFunction(Parser.java:2326)
at org.h2.command.Parser.readFunction(Parser.java:2378)
at org.h2.command.Parser.readTerm(Parser.java:2712)
at org.h2.command.Parser.readFactor(Parser.java:2244)
at org.h2.command.Parser.readSum(Parser.java:2231)
at org.h2.command.Parser.readConcat(Parser.java:2201)
那么如何在H2数据库中使用 MySql函数
答案 0 :(得分:3)
使用H2,您需要使用CURRENT_DATE
功能而不是您正在使用的功能。
正如其他人所指出的那样,有标准的SQL和一些扩展(在不同的RDBMS提供商/供应商中有所不同)。 CURRENT_DATE
是标准的一部分,DATE
函数不是。所以只需使用标准函数,你就可以使用H2和MySQL。
答案 1 :(得分:0)
不幸的是,这在交换数据库时遇到了一些困难。尽管JDBC和大多数SQL语句是兼容的,但是在内置函数之间存在问题,这些函数因数据库供应商而异。
有一些方法可以解决这个问题:
答案 2 :(得分:0)
你应该在MySQL compatibility mode(= MySQL方言)中运行H2而不改变你当前的SQL查询。
修改强>:
那么如何在H2数据库中使用MySql函数
至于DATE()
函数的支持,您可以使用CREATE ALIAS
并提供自己的实现。请阅读User-Defined Functions and Stored Procedures下的示例,这非常简单。
关于此主题的H2讨论区上还有this old thread MySQL date functions的实现,但请阅读该主题以了解如何使用它们。