JPA 标准 - 如何使用 EXTRACT(字段 FROM 时间戳)?
Posted
技术标签:
【中文标题】JPA 标准 - 如何使用 EXTRACT(字段 FROM 时间戳)?【英文标题】:JPA Criteria - how to use EXTRACT(field FROM timestamp)? 【发布时间】: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"));
但是如何包装相当于
的 SQLSELECT EXTRACT(ISO_DAY_OF_WEEK FROM tstamp) FROM myTable
?有可能吗?我需要按星期几分组,所以我需要在数据库级别执行此操作。
【问题讨论】:
【参考方案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"));
【讨论】:
以上是关于JPA 标准 - 如何使用 EXTRACT(字段 FROM 时间戳)?的主要内容,如果未能解决你的问题,请参考以下文章
从日期开始的日期 EXTRACT(DAY,s.date) 不起作用 jpa 和 eclipseLink
使用 JPA 获取集合时避免 N+1 和笛卡尔积问题的标准方法是啥