Oracle排序

Oracle排序时的问题

一、对字段数据时0-220这样数据的排序

select ship_weight from (select case when WEIGHT_TON<5000 then '0-5000'

when WEIGHT_TON>=5000 and WEIGHT_TON<8000 then '5000-8000'

when WEIGHT_TON<12000 and WEIGHT_TON>=8000 then '8000-12000'

when WEIGHT_TON<16000 and WEIGHT_TON>=12000 then '12000-16000'

when WEIGHT_TON<22000 and WEIGHT_TON>=16000 then '16000-22000'

when WEIGHT_TON>=22000 then '22000以上' end ship_weight

 from contract_ship) group by ship_weight order by ship_weight asc;

如果这样排序得到的是,默认按字符串的第一个字符的大小排序,这是我不想要的

null最大排在最下面

select ship_weight from (select case when WEIGHT_TON<5000 then ' 0-5000'

when WEIGHT_TON>=5000 and WEIGHT_TON<8000 then ' 5000-8000'

when WEIGHT_TON<12000 and WEIGHT_TON>=8000 then ' 8000-12000'

when WEIGHT_TON<16000 and WEIGHT_TON>=12000 then '12000-16000'

when WEIGHT_TON<22000 and WEIGHT_TON>=16000 then '16000-22000'

when WEIGHT_TON>=22000 then '22000以上' end ship_weight

 from contract_ship) group by ship_weight order by ship_weight asc;

根据ASCII 码排序,字符串的首位在ASCII 码表中越小,排序越靠前。

当然我们也可以根据-拆分,转换成(cast)数字,排序

ASCII码参考:https://www.cnblogs.com/Wangwf-net/p/7208546.html

二、关于null

oracle认为 null 最大。

升序排列,默认情况下,null值排后面。

降序排序,默认情况下,null值排前面。

 

有几种办法改变这种情况:

(1)用 nvl 函数或decode 函数 将null转换为一特定值

(2)用case语法将null转换为一特定值(oracle9i以后版本支持。和sqlserver类似):

order by (case mycol when null then ’天津’ else mycol end)

(3)使用nulls first 或者nulls last 语法。

 

对null的说明:

1、等价于没有任何值、是未知数。

2、NULL与0、空字符串、空格都不同。

3、对空值做加、减、乘、除等运算操作,结果仍为空。

4、NULL的处理使用NVL函数或者nvl2。

5、比较时使用关键字用“is null”和“is not null”。

6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,

   count(*)中,用nvl(列名,0)处理后再查。

7、排序时比其他数据都大(索引默认是降序排列,小→大),

   所以NULL值总是排在最后。

结论:

对null 值的比较只能是is , is not , null通过其他方式和任何值(包括null)的比较结果都是空

对null值的处理可以通过nvl(,)

 

参考:

https://www.2cto.com/database/201210/159543.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值