我有一条SQL语句,并尝试用Java中的H2内存数据库执行。抛出以下异常。

SQL:

SELECT ACCT_RULE_ID, ACCT_ACTION_ID
  FROM ACCT_RULE
 WHERE (ACCT_ACTION_ID = ?)
   AND (START_DATETIME <= to_char(?, 'mm/dd/yyyy HH:MI:SS AM'))
   AND (STOP_DATETIME > to_char(?, 'mm/dd/yyyy HH:MI:SS AM'))

用Id替换第一个参数,并用新的Date()值替换第二个和第三个参数。
Exception:
Caused by: org.h2.jdbc.JdbcSQLException: Function "TO_DATE" not found; SQL statement:

最佳答案

从H2中的日期时间字段中删除时间部分的一种方法是将字段格式化为字符串,然后进行解析。这对我有用。

PARSEDATETIME(FORMATDATETIME(field_name,'yyyy-MM-dd'),'yyyy-MM-dd')

H2的解析和格式化日期函数遵循java.text.SimpleDataFormat语义。

是的,它不是 super 优化的。这很适合我们的需求,因为我们仅将H2用于单元测试。

关于java - 在H2数据库中找不到函数 “TO_DATE”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21544114/

10-14 11:36