2016-08-14 2 views
2

내가 그것을로 주문 후 다음과 같은 값으로 열이 것은 열 이름 의 (equipment_no) ASC 및 다음 목록과 같이 적절하게 정렬하는 방법 궁금 해서요.MYSQL에서 길이가 다른 영숫자 열을 정렬하는 방법은 무엇입니까?

SELECT equipment_no FROM fas_details WHERE equipment_no LIKE 'T%' ORDER BY equipment_no 

의견을 보내주십시오. 고맙습니다.

어떻게 MySQL의 종류

T - AG - 01 
T - AG - 02 
T - AG - 07 
T - AG - 08 
T - AG - 09 
T - AG - 10 
T - AG - 100 
T - AG - 101 
T - AG - 102 
T - AG - 103 
T - AG - 104 
T - AG - 11 
T - AG - 12 
T - AG - 13 
T - AG - 103 
T - AG - 104 
TG - 10 
TG - 100 
TG - 99 

나는 그것이 당신은 문자열 함수를 사용하여 정렬 할 부분을 추출해야

T - AG - 01 
    T - AG - 02 
    T - AG - 07 
    T - AG - 08 
    T - AG - 09 
    T - AG - 10 
    T - AG - 11 
    T - AG - 12 
    T - AG - 13 
    T - AG - 100 
    T - AG - 101 
    T - AG - 102 
    T - AG - 103 
    T - AG - 104 
    TG - 10 
    TG - 99 
    TG - 100 
+2

데이터를 표준화하십시오. – sagi

답변

2

마지막 숫자를 숫자로 처리하려는 것 같습니다. 트릭은 그 이름에서 다른 수의 하이픈을 처리합니다. 하나의 하이픈이 있다면, 당신은 할 수 : 귀하의 경우

order by substring_index(equipment_no, '-', 1), 
     substring_index(equipment_no, '-', -1) + 0 

이 작동 될 수 있습니다

order by (case when equipment_no not like '%-%-%' 
       then substring_index(equipment_no, '-', 1) 
       else substring_index(equipment_no, '-', 2) 
      end), 
     substring_index(equipment_no, '-', -1) + 0 

이것은 당신의 예에서와 같이 1 또는 2 하이픈 케이스를 처리합니다.

0

되고 싶은 방법. 아래의 예가 그것을 할 것입니다.

order by trim(SUBSTRING_INDEX(equipment_no, '-', -1)) 
1

당신이 시도 할 수 :

SELECT 
equipment_no 
FROM fas_details 
WHERE equipment_no LIKE 'T%' 
ORDER BY SUBSTRING_INDEX(equipment_no,SUBSTRING_INDEX(equipment_no ,'-',-1)+0,1), 
       SUBSTRING_INDEX(equipment_no ,'-',-1)+0; 

Demonstration: 당신은 (이중 하이픈) 입력의 네 가지 세트

SET @str := 'T - AG - 100'; 

SELECT SUBSTRING_INDEX(@str,'-',-1)+0 AS numberPart, 
SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,'-',-1)+0,1) AS textPart 

출력 여기 데모를 확인할 수 있습니다

(단일 하이픈)

출력 :

if equipment_no = 'TG - 100'

numberPart  textPart 
100    TG - 

참고 : 그것은 당신의 equipment_no 컬럼에 관계없이 하이픈의 수를 작동합니다.

관련 문제