按列排序,先按字母字符,再按数字字符
当我在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。