使用SQL Server/C进行字母数字排序#
问题描述:
我有字母数字数字。应用排序直通SQL服务器ORDER BY
条款后,我得到以下结果使用SQL Server/C进行字母数字排序#
select *
from WO
where WOCode = AnyNumber
order by [ColumnName]
结果:
39660A1
39660A10
39660A11
39660A2
39660A3
39660A4
39660A5
39660A6
39660A7
39660A8
39660A9
所需的结果
39660A1
39660A2
39660A3
39660A4
39660A5
39660A6
39660A7
39660A8
39660A9
39660A10
39660A11
答
假设字母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;
结果:
| 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;
通过'排序直通SQL server'你的意思是一个'ORDER BY'条款?你在找C#答案还是SQL答案?你有什么尝试?我们从哪里开始? – Plutonix
是的,我的意思是命令通过子句。 SQL或C#什么都没有问题 – SanamShaikh
还有很少的事情要做 - 正在分类什么?你会想要研究*自然排序* - 这里有很多好的答案 – Plutonix