我有字符串格式號碼列表看起來像這樣:如何按字典順序對存儲在字符串中的數字進行排序?
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-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
我不得不這樣做排序的蜂巢。我怎樣才能做到這一點?
試試這樣說:
首先,我用一個聲明表變量作爲**實體模型*爲測試場景。
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)
對不起,我回答很快......沒有意識到,這不是SQL-Server。我讓我的答案在這裏,正如你看到的一般方法,並確保你將能夠轉移這個概念... – Shnugo
這CTE似乎是完美的。但是我的列實際上包含了由連字符分隔的可變數量的數字。我怎樣才能使你的代碼動態適應這一點。例如,像3-1-3-2,2-1-3-28-7這樣的值也可能存在。 –
@SakshamArora我對你的工具沒有經驗。在SQL Server中,人們會使用某種'string-split'(原生v2016 +,下面是XML,遞歸CTE或循環)。這對你有用嗎?找到類似的東西(SQL-Server-syntax)[這裏](http://stackoverflow.com/a/37061143/5089204)或[這裏](http://stackoverflow.com/a/32733141/5089204) – Shnugo
切割使用的分隔符'-',轉換爲int的第一子,同爲第二part.Hive必須有此操作某些功能。 – Mihai
所以你不想要字典排序。 –
在一個字符串中,默認順序是字典式的。因此,您可以添加ORDER BY yourfield以獲得期望的結果 –