如何在SQL Server中按数字排序?

时间:2009-07-08 18:02:34

标签: sql sql-server

我有一个表,其中列存储为字符串,但它实际上是这样的数字:

17 - Doe
2 - Mike
3 - James

我需要对它们进行排序并创建如下输出:

2 - Mike
3 - James
17 - Doe

如何编写SQL?提前谢谢!

3 个答案:

答案 0 :(得分:8)

试试这个:

DECLARE @Yourtable table (data varchar(50))
insert into @Yourtable values ('17 - Doe')
insert into @Yourtable values ('2 - Mike')
insert into @Yourtable values ('3 - James')

SELECT * FROM @Yourtable order by CONVERT(int,left(data, charindex('-', data)-1))

您不应该以这种方式存储数据,在此表中添加新的int列并运行此列来修复表格

DECLARE @Yourtable table (data varchar(50), newINT int)
insert into @Yourtable values ('17 - Doe',null)
insert into @Yourtable values ('2 - Mike',null)
insert into @Yourtable values ('3 - James',null)

UPDATE @Yourtable
    SET newINT=CONVERT(int,left(data, charindex('-', data)-1))
        ,data=RIGHT(data, LEN(data)-charindex('-', data)-1)

如果需要加入或选择索引,可以在新的int列中添加索引。现在你可以对它进行常规的ORDER BY。

答案 1 :(得分:2)

两个很大的假设 - 如果格式总是如上所述那么你可以在你的顺序中拉出整数。没有要测试的SQL服务器,但这样的东西

order by cast(left(yourcol, charindex('-', yourcol) as integer))

答案 2 :(得分:0)

原谅我如果我错过了一点,但我觉得这很简单明了。 以下是我用来获得所需结果的查询。它适用于名称之前的任何数字..

select col from *table_name* order by convert(int,substring(id,0,charindex('-',id)));

如果我错过了什么,请指出某人......