我正在尝试使用某些特定时间范围的时间戳日期来过滤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
这不是生产代码,因此查询中的转换值没有性能问题。
谢谢您的任何建议!
答案 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