Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 날짜 계산 시 ORDER BY 절을 활용하는 방법

날짜를 계산할 때 ORDER BY 절을 함께 사용하면 원하는 레코드를 훨씬 더 편리하게 찾을 수 있습니다. 이해를 돕기 위해 다음과 같은 데이터를 가진 'Collegedetail' 테이블을 예로 들어 살펴보겠습니다.

mysql> Select * from Collegedetail;
+------+---------+------------+
| ID   | Country | Estb       |
+------+---------+------------+
| 111  | INDIA   | 2010-05-01 |
| 130  | INDIA   | 1995-10-25 |
| 139  | USA     | 1994-09-25 |
| 1539 | UK      | 2001-07-23 |
| 1545 | Russia  | 2010-07-30 |
+------+---------+------------+
5 rows in set (0.00 sec)

대학의 운영 연차 계산하기

먼저, 각 대학이 설립된 지 몇 년이 되었는지 계산해 보겠습니다. CURDATE() 함수와 YEAR(), RIGHT() 함수를 조합하면 현재 날짜 기준의 정확한 연차를 구할 수 있습니다.

mysql> Select ID, estb, CURDATE(),((YEAR(CURDATE())-YEAR(estb))-(RIGHT(CURDATE(),5)<RIGHT(estb,5))) AS 'YEARS_OLD' from collegedetail;
+------+------------+------------+-----------+
| ID   | estb       | CURDATE()  | YEARS_OLD |
+------+------------+------------+-----------+
| 111  | 2010-05-01 | 2017-11-30 |         7 |
| 130  | 1995-10-25 | 2017-11-30 |        22 |
| 139  | 1994-09-25 | 2017-11-30 |        23 |
| 1539 | 2001-07-23 | 2017-11-30 |        16 |
| 1545 | 2010-07-30 | 2017-11-30 |         7 |
+------+------------+------------+-----------+
5 rows in set (0.00 sec)

여기서 사용된 수식 (YEAR(CURDATE())-YEAR(estb))-(RIGHT(CURDATE(),5)<RIGHT(estb,5))는 단순히 연도 차이만 구하는 것이 아니라, 올해 설립 기념일이 아직 지나지 않았다면 1년을 빼주어 정확한 만 연차를 계산해 줍니다.

ORDER BY 절로 결과 정렬하기

위 쿼리에 ORDER BY 절을 추가하면 연차를 기준으로 결과가 정렬되어 검색이 한결 편리해집니다.

mysql> Select ID, estb, CURDATE(),((YEAR(CURDATE())-YEAR(estb))-(RIGHT(CURDATE(),5)<RIGHT(estb,5))) AS 'YEARS_OLD' from collegedetail ORDER BY YEARS_OLD;
+------+------------+------------+-----------+
| ID   | estb       | CURDATE()  | YEARS_OLD |
+------+------------+------------+-----------+
| 111  | 2010-05-01 | 2017-11-30 |         7 |
| 1545 | 2010-07-30 | 2017-11-30 |         7 |
| 1539 | 2001-07-23 | 2017-11-30 |        16 |
| 130  | 1995-10-25 | 2017-11-30 |        22 |
| 139  | 1994-09-25 | 2017-11-30 |        23 |
+------+------------+------------+-----------+
5 rows in set (0.01 sec)

위 결과 집합을 보면, ORDER BY 절과 별칭 'YEARS_OLD'를 함께 사용했을 때 연차가 낮은 순서부터 정렬되어 가장 오래된 대학을 손쉽게 확인할 수 있습니다.

DESC 키워드로 내림차순 정렬하기

반대로 DESC 키워드를 ORDER BY 절과 함께 사용하면 연차가 많은 순서, 즉 가장 오래된 대학이 첫 번째 행에 표시됩니다.

mysql> Select ID, estb, CURDATE(),((YEAR(CURDATE())-YEAR(estb))-(RIGHT(CURDATE(),5)<RIGHT(estb,5))) AS 'YEARS_OLD' from collegedetail ORDER BY YEARS_OLD DESC;
+------+------------+------------+-----------+
| ID   | estb       | CURDATE()  | YEARS_OLD |
+------+------------+------------+-----------+
| 139  | 1994-09-25 | 2017-11-30 |        23 |
| 130  | 1995-10-25 | 2017-11-30 |        22 |
| 1539 | 2001-07-23 | 2017-11-30 |        16 |
| 111  | 2010-05-01 | 2017-11-30 |         7 |
| 1545 | 2010-07-30 | 2017-11-30 |         7 |
+------+------------+------------+-----------+
5 rows in set (0.00 sec)

정리

이처럼 MySQL에서는 날짜 계산식에 별칭(Alias)을 부여하고, 그 별칭을 ORDER BY 절에서 그대로 사용할 수 있습니다. ASC(오름차순)와 DESC(내림차순)를 상황에 맞게 활용하면 가장 오래된 레코드나 가장 최근의 레코드를 별도의 복잡한 조건 없이 즉시 찾아낼 수 있다는 점이 큰 장점입니다.