2011-03-07 2 views
0

영화를 가지고 있다고 가정 해 봅시다. 영화의 이름은 varchar입니다. 그러나 때로는 영화 이름에 9 이상의 일련 번호 나 시리즈 또는 에피소드가 포함되는 경우가 있습니다. 인간과 같은 숫자를 처리하기 위해 영화 이름을 어떻게 정렬 할 수 있습니까?속편 번호가 올바르게 포함 된 영화 이름 (varchar)을 정렬하는 방법은 무엇입니까?

select * from movies order by name 

Alpha 
Beta 
Gamma 1 
Gamma 10 
Gamma 2 
Gamma 3 
Gamma 4 
Gamma 5 
Gamma 6 
Gamma 7 
Gamma 8 
Gamma 9 
Delta 

는 10 일 후를 참조하십시오

이는 기본적으로 정렬하는 방법이다? 나는 내가 알고 싶은 것은이 같은 분류하는 방법이다 것을 않는 이유를 알고 : 나는 온통 솔루션을보고하고이 문제를 해결 아무것도 발견하지 않았습니다

Alpha 
Beta 
Gamma 1 
Gamma 2 
Gamma 3 
Gamma 4 
Gamma 5 
Gamma 6 
Gamma 7 
Gamma 8 
Gamma 9 
Gamma 10 
Delta 

.

이 그냥 간단한 예입니다 있습니다, 실제 이름은 대부분의 다른 영화 이름이 그들에 숫자를하지 않아도, 그래서 솔루션은 믿을주세요 훨씬 더 복잡 Gamma The Explorer 1. episode 또는 Gamma The Explorer 2. series 1. episode 또는 Gamma The Explorer 3. episode Director's Cut 추천하고 될 수 있습니다 문자열의 특정 위치 나 위치에 숫자가 있거나 name+0을 사용하여 정렬하는 경우 - 원하는 해결책이 아닙니다.

다른 소프트웨어 중 Windows 탐색기가 올바른 (사람) 방식으로 파일 이름을 정렬하는 것을 알고 있으며, MySQL이 그렇게 명백한 것을 처리 할 수 ​​없다고 생각합니다. 이것에 대한 실현 가능한 해결책이 될 수 있습니다.

편집 : 분명히 자연 정렬이라고합니다. MySQL은 실제로 이것을 전혀 가지고 있지 않습니까? 선택 사항 : UDF 란 무엇이며, 자연 정렬을 위해 어디서 구할 수 있습니까? 서버에서 어떻게 구할 수 있습니까?

+2

관련 mysql 기능 요청 : http://bugs.mysql.com/bug.php?id=1588 –

+0

고마워, 나는 그걸 보지 못했다. –

답변

0
SELECT movies.*, 
     SUBSTRING_INDEX(name, ' ', 1) AS name_str, 
     SUBSTRING_INDEX(name, ' ', -1) + 0 AS name_num 
    FROM movies 
ORDER BY name_str, name_num 
+0

고마워,하지만 그게 내가 원하는 건 아니야. 내가 열거 한 것은 단순한 예일뿐입니다. 실제 이름은'Gamma The Explorer 1. episode' 나'Gamma The Explorer 2. series 1. episode' 나'Gamma The Explorer 3. episode Director 's Cut'과 다른 영화의 이름과는 달리 훨씬 더 복잡 할 수 있습니다. 그들 안에있는 숫자. –

관련 문제