6

我有一个名为Number填充此数据的列(列是 nchar):

1
2
1091
3
20
2B

我想要一个给出这个顺序的选择语句:

1
2
2B
3
20
1091

我怎么能做到这一点?谢谢大家的帮助

(已编辑)

4

3 回答 3

18

在发现第一个非数字的位置后,您可以通过转换为数字来执行一些技巧。即使原始字符串不包含字母,在末尾附加一个随机字符也可以将所有字符串视为相同。

SELECT [Number] FROM dbo.TableName 
ORDER BY CONVERT(INT, LEFT(Number, PATINDEX('%[^0-9]%', Number + 'z')-1));
于 2012-09-21T21:08:26.303 回答
1

您要查找的内容称为NATURAL SORT,它与大多数系统提供的常规排序不同。我在 Stack Overflow 上找到了一些帖子,其中涵盖了各种流行 SQL 引擎中的自然排序,包括一个关于SQL Server.

这里的想法可能会让你开始寻找解决方案。

Oracle:如何在 SQL 查询中实现“自然”排序?

不过,您可能必须更改 SQL 引擎的语法。

找到另一个 MYSQL 版本:

MySQL中的自然排序

尚未找到任何适用于 SQL Server 的内容。

编辑3

啊,这个也涵盖了一些 SQL Server 的想法:

MySQL中的自然排序

于 2012-09-21T21:02:50.870 回答
1

使用 PATINDEX,检查这个SQL Fiddle代码。@AaronBertrand 在我测试时刚刚回答。

只是为了添加更多价值和信息,请检查此 SQLServerCentral 链接,因为您可以在那里找到更多答案。

并检查Microsoft SQL 2005 中的这个 Natural (human alpha-numeric) sort,有很多有用的答案和变体。

于 2012-09-21T21:15:42.460 回答