我有一個表格,裏面有一個TimeStamp
列。我想在該表上執行一個查詢,條件是隻檢查該列上的日期而不是時間。 我如何在HQL中做到這一點?基於時間戳列上日期的HQL查詢?
假設我的專欄的值爲07/23/2013 04:40:59 PM
,我想選擇查詢以僅檢查7/23/2013
並忽略時間。
我有一個表格,裏面有一個TimeStamp
列。我想在該表上執行一個查詢,條件是隻檢查該列上的日期而不是時間。 我如何在HQL中做到這一點?基於時間戳列上日期的HQL查詢?
假設我的專欄的值爲07/23/2013 04:40:59 PM
,我想選擇查詢以僅檢查7/23/2013
並忽略時間。
在MySQL HQL可以是這樣的:
where DATE_FORMAT(date_column,'MM/dd/yyyy') = :date
其中的日期是「2013年7月23日」
你可以把兩個約束到您HQL,一個指定大於或等於搜索日期的開始日期,以及指定日期少於第二天的日期。
即
table.timestamp >= 07/23/2013 AND table.timestamp < 07/24/2013
或
from Table where to_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23'
另一種方法是使用DAY(...)
,MONTH(...)
,YEAR(...)
expressions
WHERE MONTH (timestampcol) = 7
AND DAY (timestampcol) = 23
AND YEAR (timestampcol) = 2013
在Postgres這是映射到extract(field from timestamp)功能
Wilts C. from Table to_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23'
是正確的答案。其他答案不涉及HQL,也不涉及如何格式化日期輸入以便在HQL中進行比較。
我沒有足夠的聲望來投票。 HQL將採用日期字符串輸入(注意SQL注入)並將其與您的列日期字符串格式進行比較。另一個例子:to_char(surveyDate,'YYYY/MM/DD') between '2000/09/23' and '2015/07/23'
任何人都可以解釋爲什麼我的答案downvoted? –
因爲第一個解決方案是硬編碼的。計算下一個日期(7月24日)並不是很好,然後將它傳遞給SQL查詢。第二種解決方案更好,所以我現在點擊upvote。 – Alex