假设字母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