在oracle中根据用户偏好对字符进行排序



我在一个表中有一列的值如下

col1
----
AGP
BBP
CGR
DER
ESP

在选择时,需要像下面的一样对值进行排序

col1
---
DER
ESP
AGP
CGR
BBP

使用CASE表达式:

SELECT col1
FROM   table_name
ORDER BY
CASE col1
WHEN 'DER' THEN 1
WHEN 'ESP' THEN 2
WHEN 'AGP' THEN 3
WHEN 'CGR' THEN 4
WHEN 'BBP' THEN 5
ELSE 6
END;

DECODE:

SELECT col1
FROM   table_name
ORDER BY
DECODE( col1, 'DER', 1, 'ESP', 2, 'AGP', 3, 'CGR', 4, 'BBP', 5, 6 );

样本数据:

CREATE TABLE table_name ( col1 ) AS
SELECT 'AGP' FROM DUAL UNION ALL
SELECT 'BBP' FROM DUAL UNION ALL
SELECT 'CGR' FROM DUAL UNION ALL
SELECT 'DER' FROM DUAL UNION ALL
SELECT 'ESP' FROM DUAL;

两种输出:

|COL1||:---||订单||ESP||AGP||CGR||BBP|

db<gt;小提琴这里

您可以在order by中使用DECODE,如下所示:

select * 
from your_table
order by decode(col1,'DER', 1, 'ESP', 2, 'AGP', 3,
'CGR', 4, 'BBP', 5, 6)

最新更新