MS SQL Server 2000
我在表A中有一个名为Name的列。我希望对Name字段进行排序。Name start的许多记录都是KL,后面跟着一个数字(KL 1234、KL 2、KL 323等)。
表A
名字
有能力
太棒了
九龙内地段2
KL 323
九龙内地段1234
斑马
如果我使用
Select Name from A
Order by Name我得到了
有能力
太棒了
九龙内地段1234
九龙内地段2
KL 323
斑马
我想要
有能力
太棒了
九龙内地段2
KL 323
九龙内地段1234
斑马
如果它们都是从KL开始的,我可以使用
Select Name from A
Order by cast(replace(name, 'KL', '') as big int)但是对于不是以KL开头的值,这会产生一个"unble to cast name as big int“错误
谢谢你的帮助。
发布于 2008-12-10 16:13:21
试试这个:
Order By
Case When Left(name, 2) = 'KL'
Then 'KL' + Replace(Str(Cast(replace(name, 'KL', '') as BigInt), 12), ' ', '0')
Else name End发布于 2008-12-10 16:21:59
ORDER BY
CASE WHEN CHARINDEX(' ', name)=0 THEN name
ELSE LEFT(name, CHARINDEX(' ', name)) END,
CASE WHEN CHARINDEX(' ', name)=0 THEN 0
ELSE CONVERT(BIGINT,
SUBSTRING(name, CHARINDEX(' ', name)+1, LEN(name))) END更新错误的结束语)评论后
https://stackoverflow.com/questions/356547
复制相似问题