假設字母A
始終處於相同的位置,並且後面的字符是整數只有。
然後,你可以這樣做:
WITH CTE AS
(
SELECT
WOCode,
CAST(SUBSTRING(WOCode, CHARINDEX('A', WOCode) + 1,
LEN(WOCode) - CHARINDEX('A', WOCode) + 1) AS INT) AS DisplayOrder
FROM
WO
)
SELECT *
FROM CTE
ORDER BY DisplayOrder;
Demo
結果:
| WOCode |
|----------|
| 39660A1 |
| 39660A2 |
| 39660A3 |
| 39660A4 |
| 39660A5 |
| 39660A6 |
| 39660A7 |
| 39660A8 |
| 39660A9 |
| 39660A10 |
| 39660A11 |
您還可以使用TRY_CAST
,以避免可能的結果,因爲使用鑄鐵與非整數值的錯誤(感謝@ zambonee的建議):
WITH CTE AS
(
SELECT
WOCode,
CASE
WHEN TRY_CAST(WOCode AS INT) IS NULL
THEN CAST(SUBSTRING(WOCode,
CHARINDEX('A', WOCode) + 1,
LEN(WOCode) - CHARINDEX('A', WOCode) + 1) AS INT)
ELSE 0
END AS DisplayOrder
FROM
WO
)
SELECT *
FROM CTE
ORDER BY DisplayOrder;
updated demo
通過'排序直通SQL server'你的意思是一個'ORDER BY'條款?你在找C#答案還是SQL答案?你有什麼嘗試?我們從哪裏開始? – Plutonix
是的,我的意思是命令通過子句。 SQL或C#什麼都沒有問題 – SanamShaikh
還有很少的事情要做 - 正在分類什麼?你會想要研究*自然排序* - 這裏有很多好的答案 – Plutonix