oracle null值的排序

2007年十月18日 由 贝贝爸 Leave a reply »

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

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

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

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>

Popularity: 24%

相关文章

Advertisement

2 Responses

  1. lirun 说:

    谢谢,学到,也用上了

  2. kyrer 说:

    非常好,正准备逻辑处理,看到赞一个

Leave a Reply

很抱歉评论不显示链接,发表垃圾评论徒劳。