프로그램을 개발하면서 데이터베이스(DB)에서 SELECT 구문으로 테이블의 데이터를 가져올 때 날짜가 들어 있는 컬럼(Column)의 데이터를 가져오는 경우가 많습니다.
입력일자, 생성일자, 변경일자, 만기일자, 생일, 판매일자, 구매일자, 마감일자 등 수 많은 날짜 형식의 데이터를 가져와서 처리하거나 저장을 하게 됩니다.
이렇게 가져온 날짜에서 특정 일수를 더하거나 뺀 날짜를 처리하는 구문을 사용하거나 해당 날짜의 월(月)의 마지막 날짜를 가져오는 로직을 처리하는 경우도 의외로 많이 사용하게 됩니다.
프로그램에서 구문으로 처리할 수도 있지만 SELECT 쿼리에서 내장 함수를 사용해서 바로 계산한 결과를 쿼리문으로 받으면 좀 더 빠르고 효과적으로 처리가 가능합니다.
이번 글에서는 MySQL에서 날짜에 지정 날짜를 추가해서 가져오거나 월의 마지막 날을 가져오는 방법 각각에 대해 설명해 보겠습니다.
MySQL에서 DATE_ADD를 사용하여 날짜에 특정 기간을 추가해서 가져오는 방법
MySQL 쿼리에서 DATE_ADD 내장 함수를 사용하면 원하는 기간에 대한 계산된 결과의 날짜를 쉽게 가져올 수 있습니다.
DATE_ADD()는 MySQL 데이터베이스에서 주어진 날짜를 늘려주는 기능을 하는 함수입니다.
두 개의 인수를 가지며 첫 번째 인수는 변경하려는 날짜이고, 두 번째 인수는 INTERVAL 연산자 뒤의 추가할 날짜/시간의 정수 값과 날짜/시간의 단위를 지정해 줍니다.
- 작성 Query문 예 : SELECT srvdt, DATE_ADD(srvdt, INTERVAL 10 DAY) FROM table1 WHERE srvdt>’2022-11-20′
- srvdt 칼럼에 10일을 추가해서 가져오는 쿼리문 입니다.
- 2022-11-20이 2022-11-30로, 2022-11-21이 2022-12-02로 추가된 날짜를 확인할 수 있습니다.
※ 날짜/시간의 단위로 DAY 이외에 WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND 등을 사용해서 날짜/시간을 변경할 수도 있습니다.
mysql> SELECT DATE_ADD(‘2022-11-01’,INTERVAL 1 DAY);
-> ‘2022-11-02’
mysql> SELECT DATE_SUB(‘2022-11-01’,INTERVAL 1 YEAR);
-> ‘2023-11-01’
mysql> SELECT DATE_ADD(‘2022-12-31 23:59:59’, INTERVAL 1 SECOND);
-> ‘2023-01-01 00:00:00’
mysql> SELECT DATE_ADD(‘2022-12-31 23:59:59’, INTERVAL 1 DAY);
-> ‘2023-01-01 23:59:59’
mysql> SELECT DATE_ADD(‘2100-12-31 23:59:59’, INTERVAL ‘1:1’ MINUTE_SECOND);
-> ‘2101-01-01 00:01:00’
mysql> SELECT DATE_SUB(‘2025-01-01 00:00:00’, INTERVAL ‘1 1:1:1’ DAY_SECOND);
-> ‘2024-12-30 22:58:59’
mysql> SELECT DATE_ADD(‘1900-01-01 00:00:00’, INTERVAL ‘-1 10’ DAY_HOUR);
-> ‘1899-12-30 14:00:00’
mysql> SELECT DATE_SUB(‘2022-01-02’, INTERVAL 31 DAY);
-> ‘2021-12-02’
mysql> SELECT DATE_ADD(‘2022-12-31 23:59:59.000002’, INTERVAL ‘1.999999’ SECOND_MICROSECOND);
-> ‘2023-01-01 00:00:01.000001’
|
MySQL에서 LAST_DAY를 사용하여 날짜가 포함된 해당 월(月)의 마지막 날짜를 가져오는 방법
MySQL 쿼리에서 LAST_DAY 내장 함수를 사용하면 쉽게 특정 일자가 포함 된 월(月)의 마지막 날짜를 가져올 수 있습니다.
LAST_DAY()는 MySQL에서 지정한 날짜가 들어 있는 달(月)의 마지막 날짜를 반환하는 함수입니다.
LAST_DAY() 함수는 하나의 날짜 데이터 유형 인수를 사용하며 반환 되는 값 역시 날짜 데이터 유형입니다.
- 작성 Query문 예 : SELECT LAST_DAY(‘2022-02-05’) AS last_day_feb, LAST_DAY(‘2022-11-05’) AS last_day_nov FROM table1
- 2022-02-05과 2022-11-05에 대한 해당 월의 마지막 일자를 가져오는 쿼리문입니다..
- 2022년 2월의 마지막 날인 2022-02-28과 11월의 마지막 날인 2022-11-30일이 반환 된 결과를 확인할 수 있습니다.
결론
기준 일자에서 특정 기간이 경과한 일자를 가져오는 방법을 프로그램 구문으로 처리해서 결과를 얻을 수도 있지만 SQL Query 문에서 바로 계산 결과를 가져오는 방법이 훨씬 효율적일 수 있습니다.
특정 월의 마지막 일자를 구하는 방법도 역시 프로그램 구문으로 가져올 수 있는 방법과 SQL Query 문에서 바로 계산 된 결과를 가져오는 방법 중 어떤 방식이 더 효율적인지 잘 판단해서 사용하시면 좋을 듯 합니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^