我有一个名为Number
填充此数据的列(列是 nchar):
1
2
1091
3
20
2B
我想要一个给出这个顺序的选择语句:
1
2
2B
3
20
1091
我怎么能做到这一点?谢谢大家的帮助
(已编辑)
我有一个名为Number
填充此数据的列(列是 nchar):
1
2
1091
3
20
2B
我想要一个给出这个顺序的选择语句:
1
2
2B
3
20
1091
我怎么能做到这一点?谢谢大家的帮助
(已编辑)
在发现第一个非数字的位置后,您可以通过转换为数字来执行一些技巧。即使原始字符串不包含字母,在末尾附加一个随机字符也可以将所有字符串视为相同。
SELECT [Number] FROM dbo.TableName
ORDER BY CONVERT(INT, LEFT(Number, PATINDEX('%[^0-9]%', Number + 'z')-1));
您要查找的内容称为NATURAL SORT,它与大多数系统提供的常规排序不同。我在 Stack Overflow 上找到了一些帖子,其中涵盖了各种流行 SQL 引擎中的自然排序,包括一个关于SQL Server
.
这里的想法可能会让你开始寻找解决方案。
不过,您可能必须更改 SQL 引擎的语法。
找到另一个 MYSQL 版本:
尚未找到任何适用于 SQL Server 的内容。
编辑3
啊,这个也涵盖了一些 SQL Server 的想法:
使用 PATINDEX,检查这个SQL Fiddle代码。@AaronBertrand 在我测试时刚刚回答。
只是为了添加更多价值和信息,请检查此 SQLServerCentral 链接,因为您可以在那里找到更多答案。
并检查Microsoft SQL 2005 中的这个 Natural (human alpha-numeric) sort,有很多有用的答案和变体。