如何按字典顺序对存储在字符串中的数字进行排序?

时间:2016-11-18 08:11:44

标签: sql sorting hadoop hive

我有一个字符串格式的数字列表,如下所示:

  

1-1
1-11 11 1-12
1-2
1-21
1-2-31

我想对它进行排序,以便我得到以下格式的输出。

  

1-1
1-2-2-2-31
1-11
1-21
1-21

我必须在Hive中进行这种排序。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

试试这样:

首先,我将声明的表变量用作测试场景的**模型*。

CTE将切断连字符处的数字。然后分别对两个部分使用数字排序。

DECLARE @tbl TABLE(StringNumber VARCHAR(10));
INSERT INTO @tbl VALUES
 ('1-1')
,('1-2')
,('1-11')
,('1-12')
,('1-21');

WITH Parted AS
(
    SELECT LEFT(StringNumber,pos.Hyph-1) AS PartOne
          ,SUBSTRING(StringNumber,pos.Hyph+1,1000) AS PartTwo
          ,StringNumber
    FROM @tbl AS tbl
    CROSS APPLY(SELECT CHARINDEX('-',StringNumber) ) AS Pos(Hyph)
)
SELECT * FROM Parted
ORDER BY CAST(PartOne AS INT),CAST(PartTwo AS INT)