2

列名が「BatchNo」のテーブルがあり、文字列と数値の両方が一緒に含まれています。選択クエリを入力すると、次の結果が得られました。

ここに画像の説明を入力してください

「BatchNo」列を次の形式で並べ替えたい

ここに画像の説明を入力してください

私の問題では、将来のバッチには、数値を含むa、b、c....文字または数値のみが含まれる可能性があります。この列を並べ替えるにはどうすればよいですか?皆さんが私が解決策を得るのを手伝ってくれることを願っています。

4

3 に答える 3

2

テーブルのスキーマをに変更してみませんか?

CREATE TABLE tableName
(
    ShipmentNo INT,
    ProjectCode VARCHAR(50),
    BatchNo INT,
    SubBatch INT,
    .....
)

このように、それはあなたが望むようにvalkuesを分類することです。

フォローアップの質問は、BatchNoからの単一の文字値のみを持っていますA-Z、例えば

11a
11b

ではなく

11aa

更新1

SELECT   *
FROM     tableName
ORDER BY CASE ISNUMERIC(batchNo)
            WHEN 1 THEN batchNo
            ELSE CAST(LEFT(batchNo, LEN(batchNo) - 1) AS INT)
         END

SQLFiddleデモ

于 2012-10-24T04:30:55.623 に答える
1

これを試して:

SELECT *
FROM tableName
ORDER BY 
CAST(LEFT(BatchNo, PATINDEX('%[^0-9]%', BatchNo + 'Z')-1) AS INT),
BatchNo

SQLフィドルデモ

于 2012-10-24T05:37:15.123 に答える
0

これはどう:

SELECT *
FROM TABLE_NAME
ORDER BY CAST(LEFT(BatchNo, PATINDEX('%[^0-9]%', BatchNo + 'A')-1) AS INT)

クエリは、数値で始まる文字列に対してのみ機能します。

于 2012-10-24T05:01:33.270 に答える