我有一个列名为“BatchNo”的表,它同时包含字符串和数值。当我输入一个选择查询时,我得到了以下结果。
我想按以下格式对“BatchNo”列进行排序
在我的问题中,未来的批次可能包含a,b,c ....带有数值或仅有数值的字母。我该如何排序这个专栏?希望你们能帮我解决问题。
答案 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
答案 1 :(得分:1)
试试这个:
SELECT *
FROM tableName
ORDER BY
CAST(LEFT(BatchNo, PATINDEX('%[^0-9]%', BatchNo + 'Z')-1) AS INT),
BatchNo
答案 2 :(得分:0)
这个怎么样:
SELECT *
FROM TABLE_NAME
ORDER BY CAST(LEFT(BatchNo, PATINDEX('%[^0-9]%', BatchNo + 'A')-1) AS INT)
查询适用于仅以数字值开头的字符串。