如何对包含字符串和数值的varchar类型列进行排序

时间:2012-10-24 04:23:02

标签: c# sql sql-server sql-server-2008

我有一个列名为“BatchNo”的表,它同时包含字符串和数值。当我输入一个选择查询时,我得到了以下结果。

enter image description here

我想按以下格式对“BatchNo”列进行排序

enter image description here

在我的问题中,未来的批次可能包含a,b,c ....带有数值或仅有数值的字母。我该如何排序这个专栏?希望你们能帮我解决问题。

3 个答案:

答案 0 :(得分: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 Demo

答案 1 :(得分:1)

试试这个:

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


SQL fiddle demo

答案 2 :(得分:0)

这个怎么样:

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

查询适用于仅以数字值开头的字符串。