sql - Oracle TRANSLATE 功能不适用于 ORDER BY
问题描述
我想在我的 Oracle ORDER BY 上使用 TRANSLATE 将列排序为 A、a、B、b...Z、z 而不是 AZ、az。
如果我在我的 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
解决方案
您没有在 order by 语句中为 Translate 函数指定一列。它总是在翻译1
。
1
将您的订单中的替换为a1
您尝试排序的列。
ORDER BY TRANSLATE(a1,
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
请注意,如果您只是使用它进行排序,则可以通过以下方式以更具可读性的方式实现相同的目标:
ORDER BY UPPER(a1), a1
推荐阅读
- c# - Physics.Linecast() 未检测到地面
- rally - 使用 Rally Excel-Addin,我可以在将新用户故事导入 Rally 时添加标签吗?
- django - AND查询django ORM中的外键表
- python - pandas groupby & 按计数过滤
- amazon-web-services - Amazon AWS SQS RetrieveMessage 计数低
- java - 将缩略图(位图)作为 onActivityResult 的 Intent 传递时,ImageUri 为 Null
- html - bootstrap 4:向上滚动时使粘性页脚消失
- python - 使用python标准库将本地+偏移时间转换为UTC时间
- php - 根据 Woocommerce 中的用户角色更改 COD 支付网关的默认订单状态
- azure - 使用自定义设置配置 Azure b2C 身份验证