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 回答