Oracle TRANSLATE 函数不适用于 ORDER BY
Oracle TRANSLATE function not working on ORDER BY
我想在我的 Oracle ORDER BY 上使用 TRANSLATE 将列排序为 A,a,B,b...Z,z 而不是 A-Z、a-z。
如果我在 SELECT 中应用 TRANSLATE,然后按该列进行 ORDER BY,它就可以正常工作。在 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
您还没有在 order by 语句中为翻译功能提供一列。它总是在翻译 1
.
将订单中的 1
替换为您要排序的 a1
列。
ORDER BY TRANSLATE(a1,
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
请注意,如果您只是使用它进行排序,您可以通过以下方式以更具可读性的方式实现相同的目的:
ORDER BY UPPER(a1), a1
我想在我的 Oracle ORDER BY 上使用 TRANSLATE 将列排序为 A,a,B,b...Z,z 而不是 A-Z、a-z。
如果我在 SELECT 中应用 TRANSLATE,然后按该列进行 ORDER BY,它就可以正常工作。在 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
您还没有在 order by 语句中为翻译功能提供一列。它总是在翻译 1
.
将订单中的 1
替换为您要排序的 a1
列。
ORDER BY TRANSLATE(a1,
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
请注意,如果您只是使用它进行排序,您可以通过以下方式以更具可读性的方式实现相同的目的:
ORDER BY UPPER(a1), a1