【问题标题】:JPA Criteria - how to use EXTRACT(field FROM timestamp)?JPA 标准 - 如何使用 EXTRACT(字段 FROM 时间戳)?
【发布时间】:2019-08-02 13:07:24
【问题描述】:

有一个

<T> Expression<T>   function(java.lang.String name, java.lang.Class<T> type, Expression<?>... args)

CriteriaBuilder中的方法,允许

为执行数据库函数创建一个表达式。

很好。例如,我可以从时间戳中提取小时:

Expression<Integer> year = cb.function("YEAR", Integer.class, root.get("tstamp"));

但是如何包装相当于

的 SQL
SELECT EXTRACT(ISO_DAY_OF_WEEK FROM tstamp) FROM myTable

?有可能吗?我需要按星期几分组,所以我需要在数据库级别执行此操作。

【问题讨论】:

    标签: hibernate criteria-api jpa-2.1


    【解决方案1】:

    试试这个:

    cb.function("TO_CHAR",root.get("tstamp"),cb.literal("DD")));
    

    【讨论】:

      【解决方案2】:

      PostgreSQL 函数 extract(? from ?) 是原生函数“date_part”的封装,它接受两个参数文本和日期/时间/时间戳/间隔。这意味着您可以调用:

      Expression<Integer> year = cb.function("date_part", Integer.class, cb.literal('HOUR'), root.get("tstamp"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-20
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多