메인 콘텐츠로 건너뛰기

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
MySQL은 날짜 및 시간 함수를 폭넓게 갖추고 있습니다. 주로 다루게 될 유형은 DATE(날짜만), TIME(시간만), DATETIME(날짜 + 시간, 시간대 없음), TIMESTAMP(날짜 + 시간, UTC로 저장되고 세션 시간대로 표시)입니다. 시간대 처리에 대한 자세한 내용은 MySQL의 타임스탬프와 시간대를 참조하세요.

현재 날짜와 시간 가져오기

NOW()는 문장 시작 시 한 번 평가됩니다 — 같은 INSERT의 모든 행이 같은 타임스탬프를 받습니다. SYSDATE()는 호출될 때마다 평가됩니다.

날짜 형식 지정

DATE_FORMAT은 형식 문자열을 사용하여 날짜나 datetime을 문자열로 변환합니다:
일반적인 형식 지정자:

문자열을 날짜로 파싱하기

STR_TO_DATE는 같은 형식 지정자를 사용하여 문자열을 날짜로 변환합니다:
문자열이 형식과 일치하지 않으면 NULL을 반환합니다.

날짜 연산

DATE_ADD / DATE_SUB — 간격을 더하거나 뺍니다:
간격 단위: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR. +와 - 연산자를 사용한 축약형:
DATEDIFF — 두 날짜 사이의 일수:
DATEDIFF는 시간이 아니라 일수만 셉니다. 시간을 고려한 차이에는 TIMESTAMPDIFF를 사용하세요:
TIMESTAMPDIFF(unit, from, to) — from이 to보다 앞에 온다는 점에 유의하세요.

날짜 부분 추출하기

EXTRACT / YEAR / MONTH / DAY:
DAYOFWEEK / DAYOFYEAR / WEEK:

기간으로 자르기

데이터를 월, 주, 일별로 그룹화하려면 datetime을 기간 경계로 자르세요:

Unix 타임스탬프

일반적인 패턴

최근 30일간의 레코드:
이번 달의 레코드:
생년월일로부터 나이:

자주 묻는 질문

NOW()와 SYSDATE()의 차이는 무엇인가요?

NOW()는 문장이 실행을 시작한 시점의 타임스탬프를 반환합니다 — 단일 INSERT나 UPDATE의 모든 행이 같은 값을 받습니다. SYSDATE()는 호출되는 순간의 실제 시계 시간을 반환하므로, 루프에서 삽입된 행은 서로 다른 값을 받습니다. 트랜잭션 내 일관성이 중요한 감사 타임스탬프에는 거의 항상 NOW()가 올바른 선택입니다.

INTERVAL 1 MONTH를 사용한 DATE_ADD가 월말에 이상하게 동작하는 이유는 무엇인가요?

MySQL은 마지막 유효한 날로 고정합니다. DATE_ADD('2024-01-31', INTERVAL 1 MONTH)는 2024-02-29(윤년) 또는 2024-02-28을 반환합니다. 이는 예상된 동작입니다 — “2월 31일”은 없습니다. 예측 가능한 월 연산이 필요하면 먼저 월의 시작으로 자르세요.

문제 해결

함께 보기