2017-12-27 9 views
1

나는 영문 숫자가 있습니다. SQL 서버 ORDER BY 절을 통해 정렬을 적용하면, 나는 그 결과 다음과 같은 얻을SQL 서버를 사용하여 영숫자 정렬/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 
+1

'SQL 서버를 통해 정렬'이란 말은 'ORDER BY' 절을 의미합니까? C# 응답 또는 SQL 응답을 찾고 있습니까? 너 뭐 해봤 니? 우리는 어디에서 시작해야합니까? – Plutonix

+0

예. 주문 조항을 의미합니다. SQL 또는 C# 아무것도 괜찮습니다. – SanamShaikh

+0

계속 진행하는 것이 거의 없습니다 - 정렬되는 대상은 무엇입니까? 당신은 * Natural Sort *를 연구하려고 할 것입니다 - 많은 좋은 대답은 여기 – Plutonix

답변

2

신속하고 더러운 솔루션입니다 :

SELECT * 
FROM table 
ORDER BY LEN(Field) ASC, Field ASC 

데모 here.

+0

완벽한 감사. – SanamShaikh

1

문자 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에게 감사) :

updated demo