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

17 - Doe
2 - Mike
3 - James

我需要对它们进行排序并创建如下输出:
2 - Mike
3 - James
17 - Doe

怎么写SQL?提前致谢!

最佳答案

尝试这个:

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。

10-07 14:17