Oracle - DECODE - 如果没有指定每个案例,它将如何排序?

时间:2013-08-01 08:45:42

标签: sql oracle

我必须使用DECODE来实现自定义排序:

SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1) DESC

如果col1的值超过了decode子句中指定的三个值,会发生什么?

3 个答案:

答案 0 :(得分:3)

对于未指定的col1值,DECODE将返回NULL 默认情况下,NULL值将放在前面。

如果要更改此行为,可以在DECODE中定义默认值

SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1, 0) DESC 

或订单条款中的NULLS LAST

 SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1) DESC NULLS LAST

答案 1 :(得分:1)

decode函数将返回NULL值,它位于排序的底部。你可以验证它: 从双重选择解码('z','a',3,'b',2,'c',1);

您还可以在订单子句中使用NULLS LAST / NULLS FIRST控制空值的外观。

答案 2 :(得分:1)

正常它会将某些结果作为默认值,如果不是NULL就是你得到的所以最后在这样添加一些值

SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1, 0) DESC

这样,如果col1有更多的值,它们都将返回0