VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
DATE(날짜만), TIME(시간만), DATETIME(날짜 + 시간, 시간대 없음), TIMESTAMP(날짜 + 시간, UTC로 저장되고 세션 시간대로 표시)입니다. 시간대 처리에 대한 자세한 내용은 MySQL의 타임스탬프와 시간대를 참조하세요.
현재 날짜와 시간 가져오기
NOW()는 문장 시작 시 한 번 평가됩니다 — 같은 INSERT의 모든 행이 같은 타임스탬프를 받습니다. SYSDATE()는 호출될 때마다 평가됩니다.
날짜 형식 지정
DATE_FORMAT은 형식 문자열을 사용하여 날짜나 datetime을 문자열로 변환합니다:
문자열을 날짜로 파싱하기
STR_TO_DATE는 같은 형식 지정자를 사용하여 문자열을 날짜로 변환합니다:
날짜 연산
DATE_ADD / DATE_SUB — 간격을 더하거나 뺍니다:SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.
+와 - 연산자를 사용한 축약형:
DATEDIFF는 시간이 아니라 일수만 셉니다. 시간을 고려한 차이에는 TIMESTAMPDIFF를 사용하세요:
TIMESTAMPDIFF(unit, from, to) — from이 to보다 앞에 온다는 점에 유의하세요.
날짜 부분 추출하기
EXTRACT / YEAR / MONTH / DAY:기간으로 자르기
데이터를 월, 주, 일별로 그룹화하려면 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일”은 없습니다. 예측 가능한 월 연산이 필요하면 먼저 월의 시작으로 자르세요.
문제 해결
함께 보기
- MySQL의 타임스탬프와 시간대 — 날짜 함수가 다루는 저장 유형
- MySQL BETWEEN — 날짜 범위를
>=와<로 작성하는 것이 더 안전한 이유