对sql server字符串式数字进行排序

对sql server字符串式数字进行排序,sql,sql-server,Sql,Sql Server,number.(点)number.(点)number.(点)number.(点)number等多个级别,因此字符串可以是 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.6.7.8.1.2.3454.2.11213 我尝试过使用cast,但我需要一个解决方案,而不是普通的表表达式,因为它非常慢 有没有一种方法可以像数字一样排序,使10挨着9,而不是1,谢谢你这是可行的,有几个假设,第一个数字总是整数 I need to

number.(点)number.(点)number.(点)number.(点)number等多个级别,因此字符串可以是

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.6.7.8.1.2.3454.2.11213

我尝试过使用cast,但我需要一个解决方案,而不是普通的表表达式,因为它非常慢


有没有一种方法可以像数字一样排序,使10挨着9,而不是1,谢谢你这是可行的,有几个假设,第一个数字总是整数

I need to order string containing this format
结果:

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

因此,这些字符串本身不是“数字”,而是更类似于软件版本号?每个数字的最大位数是多少?您说您已尝试使用CAST的CTE;我们能看到代码吗?数据的来源是什么?字符串中的值有限制吗?我可以想出一些方法,但它们很复杂。你能用临时表吗?你使用的是什么版本的SQL Server?Lynn,我不知道-问题中没有足够的信息-这些点可能是省略号,或者数字的一部分。这一个值似乎与其他值不同。如果删除了多余的“.”字符,它将按正确的顺序显示在列表中。假设它是数字的一部分,那么就需要有一个指南来说明如何对一个“.”与一个数字进行排序——它是在数字之前还是之后?就字母数字排序而言,我想你只需要看一下相同的位置。在这种情况下,相关文本为“1.1.1.1.1.1.1”与“1.1.1.1.1.5”。不确定是否还有其他字符。但是,就像你说的,这个问题确实需要更多的细节。问题中有一行写着,“数字。(点)数字。(点)数字。(点)数字等多个层次”,这是我的答案的基础,用这些术语来说,它是有效的。对不起,这里有一个糟糕的例子,1.1.1.1…(点表示它继续使用相同的用户编号(点)数字(点)对于几乎无限的循环,就像这里有人说的,它更像是一个软件版本,但我这里有一个问题,关于这个数字:
code
1.10,1.1,1.11,1.11.1,1.1.10.9我需要将它像一个数字一样排列,您在解决方案中显示的SQL在这种情况下不起作用。
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