【问题标题】:MySQL's TIME() function in h2 with Java使用 Java 在 h2 中的 MySQL TIME() 函数
【发布时间】:2020-10-01 09:54:52
【问题描述】:

所以,我需要将以下查询翻译成 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 函数已实现并正常工作。

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

【问题讨论】:

    标签: java spring hibernate spring-data-jpa h2


    【解决方案1】:

    如果您通读 HQL 语言规范,您会发现它在很大程度上不支持任何日期/时间函数。这主要是因为每个数据库都有自己的日期和时间处理方式,所以很少有共同的支持。但是,CAST 函数是 HQL 支持的,假设底层数据库也支持它。从H2 documentation,我们找到了这个转换为时间的例子:

    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));
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2018-08-11
      • 2011-09-08
      • 2015-02-14
      • 2023-03-09
      • 2018-07-10
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      相关资源
      最近更新 更多