2013-03-20 2 views
1

데이터베이스에 정보를 가져와야합니다. 각 행에는 2013 년 1 월과 같은 형식의 날짜가 있습니다. 가장 최근 날짜와 같은 항목을 정렬하려면 먼저 어떻게해야합니까? 이 정보는 순서대로 삽입되지 않아서 먼저 정렬해야합니다. 고맙습니다! :)mysql에서 사용자 정의 날짜로 정렬하기

+0

값이있는 날짜가 있습니까? –

+0

은 "사용자 지정"날짜를 기본 날짜/datetime/timestamp 필드로 변환하므로 문제는 근본적으로 사라집니다. ** 네이티브 포맷이 작동하면 ** 사용자 정의 포맷을 저장하지 마십시오. –

+0

날짜에 varchar를 사용했습니다. 감사합니다. :) – user2189557

답변

0

varchar에 날짜를 저장했습니다. 그래서

SELECT * FROM table WHERE STR_TO_DATE(column, %M %Y) ORDER BY column DESC 
+1

더 이상 구조를 바꿀 수 없기 때문에 이것을 사용했습니다. 이것은 나를 위해 잘 작동합니다. 감사! – user2189557

+0

도움을 주셔서 감사합니다 :) thanks –

2

날짜 형식은 TIMESTAMP, DATE 등과 같이 적절한 형식의 열에 날짜를 유지하는 경우에는 적합하지 않습니다. 날짜가 VARCHAR로 유지되는 경우 데이터베이스가 단순히 손상되고 다음에서 열 유형을 수정해야합니다. 먼저.

0

확인 정렬 STR_TO_DATE() 기능을 사용하여,이 종류의 까다 롭습니다 그러나 당신이 당신의 테이블에 데이터 형을 VARCHAR이 있기 때문에 그것이 유일한 방법이라고 생각합니다. 그것은 작동하지만 큰 테이블 데이터 성능에 대해 잘 모르겠습니다. 트릭은 varchar를 2 개의 mumber 필드로 나누는 것입니다. 하나는 연도와 월 번호입니다.


SELECT mydate 
FROM mytable 
ORDER BY RIGHT(mydate,4) DESC, //get the year 
CASE LEFT(mydate,INSTR(mydate,' ')-1) 
WHEN 'January' THEN 1 
WHEN 'February' THEN 2 
WHEN 'March' THEN 3 
WHEN 'April' THEN 4 
WHEN 'May' THEN 5 
WHEN 'June' THEN 6 
WHEN 'July' THEN 7 
WHEN 'August' THEN 8 
WHEN 'September' THEN 9 
WHEN 'October' THEN 10 
WHEN 'November' THEN 11 
WHEN 'December' THEN 12 
END DESC //get the month and turn in to number 
관련 문제