2016-11-18 68 views
0

我有字符串格式號碼列表看起來像這樣:如何按字典順序對存儲在字符串中的數字進行排序?

1-1
1-11
1-12
1-2
1-21
31年1月2日

我想排序它,這樣我得到的輸出格式如下。

1-1
1-2
31年1月2日
1-11
1-12
1-21

我不得不這樣做排序的蜂巢。我怎樣才能做到這一點?

+1

切割使用的分隔符'-',轉換爲int的第一子,同爲第二part.Hive必須有此操作某些功能。 – Mihai

+0

所以你不想要字典排序。 –

+0

在一個字符串中,默認順序是字典式的。因此,您可以添加ORDER BY yourfield以獲得期望的結果 –

回答

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) 
+0

對不起,我回答很快......沒有意識到,這不是SQL-Server。我讓我的答案在這裏,正如你看到的一般方法,並確保你將能夠轉移這個概念... – Shnugo

+0

這CTE似乎是完美的。但是我的列實際上包含了由連字符分隔的可變數量的數字。我怎樣才能使你的代碼動態適應這一點。例如,像3-1-3-2,2-1-3-28-7這樣的值也可能存在。 –

+0

@SakshamArora我對你的工具沒有經驗。在SQL Server中,人們會使用某種'string-split'(原生v2016 +,下面是XML,遞歸CTE或循環)。這對你有用嗎?找到類似的東西(SQL-Server-syntax)[這裏](http://stackoverflow.com/a/37061143/5089204)或[這裏](http://stackoverflow.com/a/32733141/5089204) – Shnugo

相關問題