2012-02-16 92 views
2

我使用Java和休眠3.2.5.ga空。按日期排序上升與去年

我有一個日期列的表。我想創建一個hql查詢,它將按日期升序對結果進行排序,但會將空值置於最後。

通常我按日期排序ASC首先返回空值和「NULL LAST」關鍵字不起作用。

我怎樣才能做到這一點?

+0

將一個SQL解決方案夠嗎?如果是這樣的話,DBMS是什麼? – 2012-02-16 11:21:14

回答

5

使用這樣的查詢:

SELECT YourDateColumn 
FROM YourTable 
WHERE YourCondition 
ORDER BY 
    CASE WHEN YourDateColumn IS NULL THEN 1 ELSE 0 END, 
    YourDateColumn 
+1

謝謝!即使在hql上也是如此 – 2012-02-16 12:37:49

0

我有一種變通方法解決方案,可能不是正確的方式,但你能想到在數據庫中有一個額外的列「臨時」的,並定義一個觸發器,將更新臨時值每次有更新的日期列並在該觸發器中,如果日期爲NULL,則將temp值設置爲100,並且如果它未將temp值設置爲0。

現在,在您的查詢的臨時遞增,日期遞增,由所有NOT NULL日期放在前面,然後日期它們是NULL

PS做一個排序:我還沒有嘗試過自己,所以只是試試看

+0

它會工作,但非常unelegant更改架構只是這樣我就可以排序 – 2012-02-16 11:10:33

+0

完全同意,或者你可以嘗試將日期設置爲一些默認值,如果它的NULL,然後嘗試做一個排序。 – Rocky 2012-02-16 11:13:07