0

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

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

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

4

3 回答 3

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 在 order 子句中

 SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1) DESC NULLS LAST
于 2013-08-01T08:57:26.280 回答
1

decode 函数将返回 NULL 值,它位于排序的底部。可以验证一下:select decode('z','a', 3, 'b', 2, 'c', 1) from dual;

您还可以在 order 子句中使用 NULLS LAST/NULLS FIRST 来控制空值的出现。

于 2013-08-01T08:51:10.380 回答
1

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

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

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

于 2013-08-01T08:55:42.107 回答