【发布时间】:2019-11-22 14:07:11
【问题描述】:
我想在我的 Oracle ORDER BY 上使用 TRANSLATE 将列排序为 A、a、B、b...Z、z 而不是 A-Z、a-z。
如果我在我的 SELECT 中应用 TRANSLATE,然后按该列排序,它可以正常工作。对 ORDER BY 编码 TRANSLATE 似乎没有任何影响。
SELECT a1,
translate(a1,
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') AS sort_col
FROM (SELECT *
FROM (SELECT 'A' AS a1 FROM dual UNION
SELECT 'a' AS a1 FROM dual UNION
SELECT 'B' AS a1 FROM dual UNION
SELECT '#' AS a1 FROM dual UNION
SELECT '0' AS a1 FROM dual ) )
--ORDER BY 2
ORDER BY TRANSLATE(1,
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
输出顺序应该是#,0,A,a,B
【问题讨论】: