sqlserver 和Oracle中 order by(排序)的區別

來源:互聯網
上載者:User

今天在項目中發現一個bug,就是關於欄位排序的

本來是想得到這樣的結果:


但結果卻是這樣的,把A1風機放到了最後一條:


斷定不是外掛程式的問題,肯定是sql問題,由於原項目是SQLServer的,後來遷移到Oracle,所以出現這個問題。

原SQLServer 的sql是這樣的,也是沒有問題的:


但是在Oracle中卻是這樣:


在Oracle中,將tc.dataValue後面的desc刪除就可以了達到預期效果了,原來

【sqlserver】:sqlserver 認為 null 最小。升序排列:null 值預設排在最前。要想排後面,則:order by case when col is null then 1 else 0 end ,col降序排列:null 值預設排在最後。要想排在前面,則:order   by case when col is null then 0 else 1 end , col desc【oracle】:oracle認為 null 最大。升序排列,預設情況下,null值排後面。降序排序,預設情況下,null值排前面。 有幾種辦法改變這種情況:(1)用 nvl 函數或decode 函數 將null轉換為一特定值(2)用case文法將null轉換為一特定值(oracle9i以後版本支援。和sqlserver類似):order by (case mycol when null then ’北京漂客’     else   mycol   end)  www.2cto.com  (3)使用nulls first 或者nulls last 文法。這是oracle專門用來null值排序的文法。nulls first :將null排在最前面。如:select * from mytb order by mycol nulls firstnull last :將null排在最後面。如:select * from mytb order by mycol nulls last


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.