我遇到与以下链接中描述的问题相同的问题:
Sorting string column containing numbers in SQL?
我有一个字符串列,其数字数据在列的开头和结尾都有空格,我需要对其进行排序。
我找到的解决方案(在MySQL中)是:
SELECT *
FROM data
ORDER BY left(st,LOCATE(st,' ')),
CAST(SUBSTRING(st,LOCATE(st, ' ')+1) AS SIGNED)
我的问题是这个解决方案是否是最佳的,如果我将其转换为Mssql并在超过100.000条记录的表上运行它,则不会产生巨大的负载。
另外请建议我转换为Mssql,因为我对mssql不太熟悉。
由于
答案 0 :(得分: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 演示
答案 1 :(得分:0)
您可能会遇到一些性能问题,即ORDER BY子句不会利用您可能定义的索引。
我的建议是将该列拆分为2列,并将ORDER BY子句更改为一个简单的:
ORDER BY Name1, Name2
为了保持应用程序代码不变,您可以添加computed column:
ALTER TABLE <tablename> ADD Name AS Name1 + ' ' + Name2
答案 2 :(得分:0)