MySQL 的 TIME() 函数在 h2 中使用 Java



所以,我需要将以下查询翻译成 Java

SELECT * FROM table WHERE TIME(date) BETWEEN TIME(startTime) AND TIME(endTime)

其中date是日期时间列。startTimeendTime都是局部变量。

我现在使用的技术是Spring和Hibernate。

以下解决方案

query.add(
Restrictions.sqlRestriction(
"TIME(date) between TIME('?') and TIME('?')", values, types
);

,其中values变量是具有startTimeendTime的数组,types变量是具有values各自类型(字符串(的数组,不幸的是与H2不兼容,因为没有实现TIME函数。我确实知道HOURMINUTESECOND功能已实现并正常工作。

我还没有找到自己实现它的方法,也无法在网上找到任何解决方案。有没有人知道我如何克服这个问题?

如果你通读 HQL 语言规范,你会发现它基本上没有任何对日期/时间函数的支持。 这主要是因为每个数据库都有自己的处理日期和时间的方式,因此几乎没有共同的支持。 但是,HQL 支持CAST函数,前提是基础数据库也支持它。 从 H2 文档中,我们找到了这个强制转换为时间的示例:

CAST(TIMESTAMP '2010-01-01 10:40:00.123456' AS TIME(6))

因此,您可以尝试在 HQL 查询中执行此操作:

SELECT *
FROM table
WHERE
CAST(date AS TIME(6)) BETWEEN CAST(startTime AS TIME(6)) AND
CAST(endTime AS TIME(6));

最新更新