我有一个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:
发布于 2018-12-20 03:40:56
您应该能够创建自己的to_date
函数
drop ALIAS if exists TO_DATE;
CREATE ALIAS TO_DATE as '
import java.text.*;
@CODE
java.util.Date toDate(String s, String dateFormat) throws Exception {
return new SimpleDateFormat(dateFormat).parse(s);
}
'
当然,根据David Small的回答,您也可以使用parsedatetime()
发布于 2016-03-25 22:23:56
从H2中的日期-时间字段中删除时间部分的一种方法是将字段格式化为字符串,然后进行解析。这对我很有效。
参数(格式(field_name,'yyyy-MM-dd'),'yyyy-MM-dd')
H2的解析和格式化日期函数遵循java.text.SimpleDataFormat语义。
是的,它不是超级优化的。这可以满足我们的需求,因为我们只将H2用于单元测试。
发布于 2014-02-04 13:04:42
H2数据库没有TO_CHAR()函数。但是H2数据库有sysdate,dual,varchar2,这使得编写可以在H2数据库上运行的oracle查询变得非常容易。因此,您可以编写一个函数,该函数将H2数据库函数别名,使其以格式处理日期/时间戳。可以在H2数据库中使用TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS')
。
https://stackoverflow.com/questions/21544114
复制相似问题