我有一个表,其中列存储为字符串,但它实际上是这样的数字:
17 - Doe
2 - Mike
3 - James
我需要对它们进行排序并创建如下输出:
2 - Mike
3 - James
17 - Doe
如何编写SQL?提前谢谢!
答案 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)));
如果我错过了什么,请指出某人......