我必须使用DECODE
来实现自定义排序:
SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1) DESC
如果 col1 的值多于 decode 子句中指定的三个值,会发生什么?
对于未指定的 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
decode 函数将返回 NULL 值,它位于排序的底部。可以验证一下:select decode('z','a', 3, 'b', 2, 'c', 1) from dual;
您还可以在 order 子句中使用 NULLS LAST/NULLS FIRST 来控制空值的出现。
正常它期望一些结果作为默认值,如果你得到的不是NULL,所以在最后添加一些值,就像这样
SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1, 0) DESC
这样,如果 col1 有更多的值,它们都将返回 0