2013-07-16 2 views
-2
040, 044P, 041BL, 041W, 041PB 

^^ 이것은 Order By 절을 사용하여 나오는 순서입니다.mysql에서 영숫자 정렬?

040, 041BL, 041PB, 041W, 044P 

내가 비슷한 질문을하기 전에 물어되어 있어야합니다 알고,하지만 난 아직 아무것도 알아낼 수 없습니다 :

나는이 대신 표시하는 방법을 생각!

편집 : X.L.Ant 님의 의견을 듣고 실수를했습니다. 그러므로 간단한 order by 절이 위에 주어진 테스트 케이스에서 작동한다. 그러나 GolezTrol이 언급 한대로 자릿수가 항상 3이되지는 않는 경우에는 여전히 복잡합니다. 이 경우 어떻게해야합니까?

+1

[이 바이올린은] (http://sqlfiddle.com/#!2/37927/1) 출력 ... –

+1

는 쿼리은 무엇입니까? –

+1

문자열이 항상 정확히 3 자리로 시작하면 특별한 조치를 취할 필요가 없습니다. 그냥 정렬 할 수 있습니다. 까다로운 부분은 숫자의 길이가 다양 할 때 번호를 번호순으로 정렬하고 숫자 뒤에 알파벳순으로 정렬하려는 경우입니다. – GolezTrol

답변

1

시도가 :

SELECT string, 
     @num := CONVERT(string, signed)       AS num_part, 
     Substring(Trim(LEADING '0' FROM string), Length(@num) + 1) AS rest_of_string 
FROM table1 
ORDER BY num_part, 
      rest_of_string 

이 방법, 숫자는 여전히 숫자 값으로 정렬됩니다 (선두 0이 고려되지 않는).

fiddle을 참조하십시오.

+0

당신은 챔피언이 아닙니다! – user1831003

+0

왜이 답변은 다운 voted 되었습니까? 이 대답을 사용했는데 ...이 문제가 있습니까? – user1831003

+0

예. 이 대답은 가능한 모든 인덱스 사용을 제거합니다. –

-1

try LPAD() 기능 - 그러나 LPAD은 자릿수를 자릅니다. 올바른 순서에

http://sqlfiddle.com/#!2/d7281/3/0

+0

답을 자세히 설명해 주시겠습니까? –

+0

'044P'는 여전히 '041BL'앞에옵니다. –

+0

죄송 합니다만, 여러가지의 것이 있다고 생각하고 있지 않았습니다. 뒤에서 chars의. 나는 한때 비슷한 문제가 있었기 때문에 잘못되었지만 1A, 10B, 11A, 2A, 213D, 3A ... 1A, 2A, 3A, 10B, 11A, 213D와 같은 잘못된 정렬 순서가있었습니다 - PHP 문제였습니다. MySQL 사이트에서 'LPAD'로 해결 – jaczes

관련 문제