从Hibernate查询中的时间戳提取时间

时间:2018-09-21 20:38:54

标签: sql postgresql hibernate spring-data-jpa hql

我正在尝试使用某些特定时间范围的时间戳日期来过滤HQL中的记录。例如,获取上个月下午1点到3点之间创建的所有项目。

我最初的想法是通过<div class="col form-group"> <label for="pets">Pets</label> <div class="SumoSelect sumo_pets" tabindex="0" role="button" aria-expanded="false"> <select id="pets" name="pets" class="sumo form-control SumoUnder" tabindex="-1"> <option value="">Select</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <p class="CaptionCont SelectBox" title="Select"> <span class="placeholder">Select</span> <label><i></i></label> </p> <div class="optWrapper"> <ul class="options"> <li class="opt"><label>Select</label></li> <li class="opt"><label>1</label></li> <li class="opt"><label>2</label></li> <li class="opt"><label>3</label></li> </ul> </div> </div> </div> 从PostgreSQL转换时间戳字段。但是Hibernate没有此嵌入式功能(我使用HQL来构建查询)。

似乎有date函数,但没有时间格式化程序。我对实施没有严格的要求,如果符合主要思想,可以调整解决方案。现在,我将日期边界作为时间戳发送,将时间值作为字符串发送,并进行两个并行的::time比较。

between

这不是生产代码,因此查询中的转换值没有性能问题。

谢谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

文档建议您可以从“时间戳”列中“提取”小时:

extract(field FROM source) 
  

来源必须是日期,时间戳记,间隔或可以是   转换为日期或时间戳。支持的字段包括:   日,星期几,小时,分钟,月,季度,秒,周和年。   https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-TypeConversionFunctions

然后您应该可以在where子句中使用它

SELECT t.*
FROM Table t 
WHERE t.status.id = ?1
AND t.startDate >= ?2 AND t.startDate <= ?3
AND extract(hour FROM t.startDate)   >= ?4 
AND extract(hour FROM t.startDate)  <= ?5