0

微软 SQL 服务器 2000

我在表 A 中有一个名为 Name 的列。我希望对名称字段进行排序。许多但不是所有名称的记录都以 KL 开头,后面跟着一个数字(KL 1234、KL 2、KL 323 等)。

表 A

姓名

Able
Bravo
KL 2
KL 323
KL 1234
斑马

如果我使用

Select Name from A 
Order by Name

我明白了

Able
Bravo
KL 1234
KL 2
KL 323
斑马

我想

Able
Bravo
KL 2
KL 323
KL 1234
斑马

如果他们都从 KL 开始,我可以使用

Select Name from A
Order by cast(replace(name, 'KL', '') as big int)

但这会为不以 KL 开头的值生成“无法将名称转换为大整数”错误

谢谢你的帮助。

4

2 回答 2

1

试试这个:

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-10T16:13:21.440 回答
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

更新错误关闭)评论后

于 2008-12-10T16:21:59.003 回答