我有一个表,其中的一列具有以下值。
|TestId|
--------
| F1 |
| F2 |
| F3 |
| A62 |
| F9 |
| DP45 |
| CAP78|
| F89 |
| F34 |
| F43 |
Run Code Online (Sandbox Code Playgroud)
我需要根据其数字部分订购它们。所以基本上我需要
F1,F2,F3,F9,F34,F43,DP45,A62,CAP78,F89
我尝试了以下查询,但得到了错误的结果。
SELECT [TestId] FROM TestingOrder
ORDER BY LEN(TestId),TestId
Run Code Online (Sandbox Code Playgroud)
我得到F1,F2,F3,F9,A62,F34,F43,F89,DP45,CAP78,这不是我想要的。
我如何解决它以获得所需的订单?
编辑:如果没有重复的值,则提供的答案有效。但是,当有重复值时失败
例如 :
|TestId|
--------
| F1 |
| F2 |
| F3 |
| A62 |
| F9 |
| DP45 |
| CAP78|
| F89 |
| F34 |
| F43 |
| F1 |
| F3 |
| F89 |
| F34 |
Run Code Online (Sandbox Code Playgroud)
我修改了答案
select TestId FROM
(SELECT DISTINCT TestId From TestingOrder) A
cross apply
( values ( convert(int,(substring(TestId, patindex('%[0-9]%', TestId), len(TestId))))) )tt(nos)
order by nos;
Run Code Online (Sandbox Code Playgroud)
结果更改为F1,F2,F3,F34,F43,DP45,A62,CAP78,F89,F9
您可以使用use patindex():
select distinct t.*
from TestingOrder t cross apply
( values ( convert(int, substring(TestId, patindex('%[0-9]%', TestId), len(TestId))))
) tt(nos)
order by tt.nos;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28 次 |
| 最近记录: |