0

Microsoft SQL Server 2000

テーブル A に Name という名前の列があります。名前フィールドをソートしたい。Name start のすべてではありませんが、多くのレコードが KL であり、その後に数字が続きます (KL 1234、KL 2、KL 323 など)。

表 A

名前

エイブル
ブラボー
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 としてキャストできません」というエラーが生成されます。

助けてくれてありがとう。

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 に答える