按列排序,先按字母字符,再按数字字符

编程语言 2026-07-10

当我在Hive查询中使用order by子句时,例如:

SELECT *
FROM EPAY
ORDER BY EUNQ
当前结果
14579536
50118664
5PM35795
期望结果
14579536
5PM35795
50118664

有什么可以添加到查询中,以获得我期望的结果吗?

我想先按字母字符排序,再按数字字符排序。

Hive正在对EUNQ列进行字典序排序,但我需要按自定义规则排序:先5PM35795,其次50118664。

解决方案

你可以使用TRANSLATE函数来创建一个新的排序键

SELECT * 
FROM epay
ORDER BY 
  translate(EUNQ,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                ,'123456789A00000000000000000000000000'),
  EUNQ

我们为新的排序键进行转换
0..9 -> 1..A -- 保留数字的顺序,将其右移到1 的位置
A..Z -> 0..0 -- 将A..Z移到第一位
并使用EUNQ以自然排序对A..Z进行排序。

对于测试数据

eId   EUNQ           
---- ----------
  1  14579536       
  2  50118664       
  3  5PM35795  
  4  5AB35795

输出结果为

eId   EUNQ            new sort key                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
---- ------          --------------
   1 14579536        2568A647                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
   4 5AB35795        600468A6
   3 5PM35795        600468A6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
   2 50118664        61229775

SQL Server示例
“Translate” 函数在Hive中的用法是一样的。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章