Spring Data Jpa 如何使用CriteriaBuilder和PostgreSQL提取时间

kd3sttzy  于 2023-11-19  发布在  Spring
关注(0)|答案(2)|浏览(172)

我在将下面的PostgreSQL表达式Map到一个CriteriaBuilder表达式时遇到了一个问题,该表达式提取了小时/分钟/dow:

select extract(hour from start_time) from meetings where id = 5;

字符串
meetings在数据库中有start_time字段,稍后Map到ZonedDateTime start Java实体字段。我尝试过CriteriaBuilder.function(),但我无法真正理解如何将hour from start_time表达式Map为一个函数参数。
谢谢你的帮助!

nlejzf6q

nlejzf6q1#

我使用DATE_PART函数来获取小时数:

builder.function("DATE_PART", Integer.class, builder.literal("hour"), root.get("start_time"))

字符串
SQL-request看起来类似:

select date_part('hour', start_time) from meetings where id = 5;

t30tvxxf

t30tvxxf2#

Extract/Date_Part将给予时间戳中指定的子字段(我假设ZonedDateTimeMap到Postgres数据类型timestamp with time zone)。如果您想要完整的时间(hh:mi:ss),那么您只需将列转换为time即可。因此

select start::time, ...           -- Postgres exclusive 
OR 
select cast(start to time), ...   --- SQL standard

字符串
如果你不想要秒,那么使用to_char:

select to_char(start, 'hh:mm'), ...

相关问题