2014-01-16 2 views
0

mysql에서 날짜를 정렬하는 방법에 대한 질문이 있습니다. order by date asc으로 수행 할 수 있으므로 바보처럼 들릴 수 있습니다. 내 테이블에 실제로 날짜 형식으로 문자열에 저장되었습니다. Wed,2014-02-19. 다음과 같은 표가 있다고 가정 해 보겠습니다. 위 같은 경우에 mysql에서 날짜 정렬 방법?

id | user_id | date 
1 | 38 | Wed,2014-02-19 
2 | 38 | Wed,2014-02-26 
3 | 38 | Wed,2014-02-12 
4 | 38 | Wed,2014-02-05 

, 나는 여전히 모든 날짜 수요일 때문에 order by date asc를 사용하여 정렬 할 수 있어요. 그러나하자

id | user_id | date 
1 | 38 | Wed,2014-02-19 
2 | 38 | Wed,2014-02-26 
3 | 38 | Thu,2014-02-13 
4 | 38 | Wed,2014-02-05 

mysql을 처음 Thu,2014-02-13를 정렬합니다, 아래 그림과 같이 일 중 하나가 다른 말한다.

어쨌든 mysql에서해야 할 일?

+2

'적절한'날짜 필드를 사용하면이 (그리고 많은 것들)은 간단합니다. –

+0

모든 날짜를 저장하고 ','을 사용하여 분해 한 다음 array_multisort를 사용하면 완료 될 수 있습니다. 그러나 코드가 복잡하고 내 회사에서 빠져 나온 다른 프로그래머가 개발 한 코드이기 때문에 가능한 한 코드를 수정하지 않으려 고합니다. 그래서 나는 그것을 mysql에서하는 방법이라고 생각하고 있었다. – n3ISe

답변

7

단순히 일종의 쉼표 이후 부분으로 : 당신이 날짜 컬럼에 대한 잘못된 유형을 사용하는 것처럼

order by substring_index(date, ',', -1) 
0

그것은 나에게 소리. 날짜 열에 DATE 또는 DATETIME 또는 varchar를 사용하고 있습니까? DATE로 전환하면 ASC와 DESC가 제대로 작동합니다.

참조 : http://dev.mysql.com/doc/refman/5.5/en/datetime.html

+0

그것은 이전 개발자가 개발했습니다. 그리고 왜 이런 식으로 데이터를 저장했는지 이유가 있습니다. – n3ISe

+0

가능한 경우 스키마 변경을 권장합니다. 그렇게 값을 저장해서는 안됩니다. 매우 비효율적입니다. 날짜 형식 지정 기능을 사용하여 원하는대로 표현할 수 있습니다 (DayOfWeek, YY/MM/DD 등). – PressingOnAlways

0

STR_TO_DATE 기능과 같이 사용 날짜에 문자열에서 날짜 필드를 변환하십시오 : 당신이 DATE 유형으로 원래의 날짜 열을 가질 수

SELECT id,user_id,STR_TO_DATE(date,'%W,%Y-%m-%d') AS new_date FROM 'table' ORDER BY new_date; 
1

Mysql Date format function & order

및 별칭으로 날짜 열의 문자열 형식을 만들고 원래 날짜 열을 사용하여 정렬 할 수 있습니다. 더 명확하게 위의 링크에 주어진, 희망이 도움이됩니다.