2014-01-20 131 views
-1
I need to order string containing this format 

號碼。(點)數目。(點)數目。(點)數等多層次因此字符串可以是順序SQL服務器字符串

1.1。 1.1.1.1.5 或 1.1.1.1.1.1.1.1.1.1.1.1.1.1 ...... 9 或或 5.5.6.7.8.1.2.3454.2.11213

我已經嘗試過投射,但我需要的是普通表格表達以外的解決方案,因爲它非常慢。

有沒有辦法訂購此類似號碼,10是下一個9,而不是1,謝謝

+0

因此,這些字符串不是「數字」本身,而是更類似於軟件版本號? –

+0

每個號碼的最大位數是多少? – wdosanjos

+0

你說你已經用CAST試過了CTE;我們可以看到這些代碼嗎? –

回答

0

這工作,有幾個假設,其中之一是第一個數字始終是一個int。

insert into @t values ('1.0'), 
('10.2.44.2'), 
('5.2.523.242'), 
('4.23.5511'), 
('0.9.4343.1.6.2'), 
('99.245.52371.0.1'), 
('1.1.1.1.1.1.5'), 
('1.1.1.1.1.1.1.1.1.1.1.1.1.1......9'), 
('5.5'), 
('5.5.6.7.8.1.2.3454.2.11213') 

SELECT CAST(SUBSTRING(c, 0, COALESCE(CHARINDEX('.',c, 0), c)) AS INT) AS FirstDigit, c 
from @t 
order by FirstDigit 

結果:

FirstDigit c 
0 0.9.4343.1.6.2 
1 1.0 
1 1.1.1.1.1.1.5 
1 1.1.1.1.1.1.1.1.1.1.1.1.1.1......9 
4 4.23.5511 
5 5.2.523.242 
5 5.5 
5 5.5.6.7.8.1.2.3454.2.11213 
10 10.2.44.2 
99 99.245.52371.0.1 
+0

不應該「1.1。 1.1.1.1.1.1.1.1.1.1.1.1 ...... 9「1.1.1.1.1.1.5之前」? –

+0

Lynn,我不知道 - 問題中沒有足夠的信息 - 那些點可能是橢圓或數字的一部分 該值與其他值不同如果多餘的「。」字符被刪除,它會以正確的順序出現在列表中 並假設它是零件的數字,那麼就需要指導如何對數字進行排序 - 它是在數字之前還是之後出現? –

+0

在字母數字排序方面,我你以爲你只想看看同等的位置。在這種情況下,相關文本是「1.1.1.1.1.1.1」與「1.1.1.1.1.1.5」。不確定這是否有其他字符。但是,就像你說的那樣,這個問題確實需要更多細節。 –