2014-01-20 152 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”。不确定这是否有其他字符。但是,就像你说的那样,这个问题确实需要更多细节。 –