我需要按日期/时间字段升序排序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