JPA 标准 - 如何使用 EXTRACT(字段来自时间戳)?

问题描述 投票:0回答:3

有一个

<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
3个回答
2
投票

PostgreSQL 函数 extract(? from ?) 是本机函数“date_part”的包装器,它采用两个参数文本和日期/时间/时间戳/间隔。这意味着您可以致电:

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

0
投票

试试这个:

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

0
投票

我发现这个问题试图找到如何将 sql 时间戳映射到自 1970-01-01 00:00:00:00.00 以来的秒数。如果有人需要的话,这是解决方案:

cb.function("date_part", String.class, cb.literal("EPOCH"), root.get("timestamp"))
© www.soinside.com 2019 - 2024. All rights reserved.