oracle null值的排序


原来写过一个程序,需要按照数据的更新日期的倒叙来排序来排序。oracle好像是把null当作最大的值,测试了varchar2和number也是这样认为的。


[code lang=”sql” linenum=”off”]
SQL> select * from t order by b;

A B C
— — —
a ab 1
b cd 2
e

SQL> select * from t order by c
2 ;

A B C
— — —
a ab 1
b cd 2
e

SQL> select * from t order by c desc;

A B C
— — —
e
b cd 2
a ab 1[/code]

按照日期排序倒序没问题,但是这个字段里面的空值会排在最前面,如果前面大多数记录都是空的,显然不合适。当时俺就先把空的转换成70年的某个日期,然后倒序拍,显示的时候把这个70年的日期转换成空。废了老鼻子劲了。
一天在网上查东西,发现oracle有个很好的功能可以解决这个问题,就是nulls first和nulls last
用法和效果如下:
[code lang=”sql” linenum=”off”]
SQL> select * from t order by c;

A B C
— — —
e 1
a ab
b cd

SQL> select * from t order by c nulls first;

A B C
— — —
a ab
b cd
e 1

SQL> select * from t order by c desc;

A B C
— — —
a ab
b cd
e 1

SQL> select * from t order by c desc nulls last;

A B C
— — —
e 1
a ab
b cd

SQL>
[/code]


《 “oracle null值的排序” 》 有 2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注