1

我遇到了与以下链接中描述的相同的问题:

在SQL中对包含数字的字符串列进行排序?

我有一个带有数字数据的字符串列,在列的开头和结尾都有空格,我需要对其进行排序。

我找到的解决方案(在 MySQL 中)是:

SELECT * 
  FROM data 
 ORDER BY left(st,LOCATE(st,' ')), 
          CAST(SUBSTRING(st,LOCATE(st, ' ')+1) AS SIGNED)

我的问题是,如果我将它转换为 Mssql 并在包含超过 100.000 条记录的表上运行它,这个解决方案是否是最佳的并且不会产生巨大的负载。

另外请建议我转换为 Mssql,因为我对 mssql 不是很熟悉。

谢谢

4

3 回答 3

1

上述 MySQL 查询的 SQL Server 版本可能看起来像

SELECT *
  FROM table1 
 ORDER BY LEFT(name, CHARINDEX(' ', name)),
          CAST(RIGHT(name, LEN(name) - CHARINDEX(' ', name) + 1) AS INT)

这是SQLFiddle演示

我们从未见过您的示例数据,但如果您在该列中只有带有前导和/或尾随空格的数值,您可以这样做

SELECT *
  FROM table1
 ORDER BY CAST(name AS INT)

这是SQLFiddle演示

于 2013-12-15T07:43:12.800 回答
0

您可能会遇到一些性能问题,因为 ORDER BY 子句不会利用您可能已经定义的索引。

我的建议是将该列拆分为 2 列并将 ORDER BY 子句更改为一个简单的子句:

ORDER BY Name1, Name2

为了保持您的应用程序代码不变,您可以添加一个计算列

ALTER TABLE <tablename> ADD Name AS Name1 + ' ' + Name2
于 2013-12-15T08:15:21.057 回答
0

您可以简单地使用RTRIMLTRIM

SELECT * 
FROM data 
ORDER BY RTRIM(LTRIM(st))

另一种解决方案是替换列中的所有空格,如下所示:

SELECT * 
FROM data 
ORDER BY REPLACE(st,CHAR(32),'')
于 2013-12-15T08:17:11.143 回答