MS SQL Server 2000
我在表A中有一个名为Name的列。我希望对Name字段进行排序。名称开始的很多但不是全部的记录将是KL,然后是一个数字(KL 1234,KL 2,KL 323等)。
能
布拉沃
KL 2
KL 323
KL 1234
斑马
如果我使用
Select Name from A
Order by Name
我得到了
能
布拉沃
KL 1234
KL 2
KL 323
斑马
我想要
能
布拉沃
KL 2
KL 323
KL 1234
斑马
如果他们都以KL开始,我可以使用
Select Name from A
Order by cast(replace(name, 'KL', '') as big int)
但是对于不以KL开头的值,这会生成“无法将名称转换为big int”错误
感谢您的帮助。
答案 0 :(得分:1)
试试这个:
Order By
Case When Left(name, 2) = 'KL'
Then 'KL' + Replace(Str(Cast(replace(name, 'KL', '') as BigInt), 12), ' ', '0')
Else name End
答案 1 :(得分:0)
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
评论后更新错误结束