我需要按日期/時間字段升序排序PostgreSQL表,例如, last_updated
。PostgreSQL按datetime asc排序,先爲空?
但該字段允許爲空或空,我想記錄與空在last_updated
前非空last_updated
來。
這可能嗎?
order by last_updated asc /* and null last_updated records first ?? */
我需要按日期/時間字段升序排序PostgreSQL表,例如, last_updated
。PostgreSQL按datetime asc排序,先爲空?
但該字段允許爲空或空,我想記錄與空在last_updated
前非空last_updated
來。
這可能嗎?
order by last_updated asc /* and null last_updated records first ?? */
PostgreSQL提供了NULLS FIRST | LAST
關鍵字的ORDER BY
子句來滿足這一需求正是:
... ORDER BY last_updated NULLS FIRST
一個典型使用情況按降序排序(DESC
),這會首先使用空值完全反轉默認升序(ASC
)。通常不可取的 - 所以,保持空值最後:
... ORDER BY last_updated DESC NULLS LAST
爲了支持與指數查詢,使之匹配:
CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
Postgres不能倒讀的B樹索引,但它的事項在那裏添加NULL值。
您可以使用CASE語句創建自定義的ORDER BY。
CASE語句會檢查您的條件,並將滿足該條件的行分配給比分配給不滿足條件的行更低的值。
它可能最容易理解給出的例子:
SELECT last_updated
FROM your_table
ORDER BY CASE WHEN last_updated IS NULL THEN 0 ELSE 1 END,
last_updated ASC;
以防萬一需要:http://www.postgresql.org/docs/9.0/static/queries-order.html – mhd 2012-03-01 06:42:56