🐬 MySQL/MySQL 함수
SQL에서 시간을 다루는 함수들: NOW(), CURDATE(), TIMEDIFF() 등 알아보기
itstory(Booho)
2024. 11. 29. 18:07
728x90
SQL에서는 날짜와 시간 정보를 효과적으로 다룰 수 있는 다양한 함수들이 제공됩니다.
이러한 시간 관련 함수들은 데이터를 날짜 및 시간 기준으로 정렬하거나 필터링하고, 시간 차이를 계산하거나 현재 시간을 추적하는 데 매우 유용합니다.
오늘은 SQL에서 자주 사용되는 시간 관련 함수들을 소개하고, 각각의 사용법을 자세히 살펴보겠습니다.
- 샘플 데이터 쿼리
INSERT INTO orders (customer_name, product_name, order_date, delivery_date)
VALUES
('김철수', '노트북', '2023-10-01 14:30:00', '2023-10-05'),
('이영희', '스마트폰', '2023-10-02 09:15:00', '2023-10-07'),
('박준혁', '태블릿', '2023-10-03 16:45:00', '2023-10-09');

- NOW() : 현재 날짜와 시간을 조회하는 함수( 연 월 일 시 분 초 )
- SQL에서 NOW() 함수는 현재 날짜와 시간을 반환합니다. 하지만 기본적으로 반환되는 시간은 데이터베이스 서버의 설정된 시간대(UTC 또는 서버의 로컬 시간대)를 기준으로 합니다. 한국 시간(KST, UTC+9)을 확인하려면 시간대를 조정해야 합니다.
SELECT now();

주의 사항
- **NOW()**는 실행 시점의 서버 시간을 기준으로 반환됩니다.
- NOW() 함수는 날짜와 시간 모두 포함된 DATETIME 형식으로 반환하므로, 시간만 필요하다면 CURTIME()을 사용하면 됩니다.
- CURDATE() : 현재 날짜만 조회
- SQL에서 CURDATE() 함수는 현재 날짜만 반환하는 함수입니다. 시간 정보는 포함되지 않고, 오늘의 날짜를 YYYY-MM-DD 형식으로 반환합니다.
SELECT CURDATE();

혼동 주의
- CURDATE(): 오늘 날짜만 반환.
- NOW(): 날짜와 시간을 함께 반환.
- CURTIME() : 현재 날짜만 조회
- SQL의 CURTIME() 함수는 현재 시간을 반환하는 함수입니다. 날짜 없이 시간 정보만 가져올 때 사용됩니다. 반환되는 형식은 HH:MM:SS (시:분:초)입니다.
SELECT CURTIME();

- YEAR() 함수는 날짜에서 연도(YYYY)만 추출하는 SQL 함수입니다.
- orders 테이블에서 order_date 에서 년도만 가져오시오.
SELECT *, year(order_date)
FROM orders o ;

- MONTH() 함수는 날짜에서 "월(Month)" 값만 추출합니다. 결과는 숫자(1~12)로 반환되며, 1은 1월, 2는 2월, ..., 12는 12월을 나타냅니다.
- orders 테이블에서 order_date 에서 월 정보만 가져오시오.
SELECT *, month(order_date )
FROM orders o ;

- DAY() 함수는 날짜에서 "일(Day)" 값을 추출합니다. 결과는 해당 날짜의 **일자(1~31)**를 숫자로 반환합니다.
- orders 테이블에서 order_date 에서 일 정보만 가져오시오.
SELECT *, day(order_date )
FROM orders o ;

주의 사항
- **DAY()**는 날짜가 유효한 경우에만 작동합니다.
- 유효하지 않은 날짜를 입력하면 오류가 발생합니다
- HOUR() 함수는 시간 정보에서 "시(Hour)" 값을 추출합니다. 결과는 0부터 23까지의 숫자로 반환되며, 24시간 형식(군사 시간)으로 나타납니다.
- orders 테이블에서 order_date 에서 시 정보만 가져오시오.
SELECT *, hour(order_date)
FROM orders o ;

주의 사항
- **HOUR()**는 DATETIME, TIME 형식에서만 작동합니다.
- 만약 NULL 값이나 잘못된 형식의 데이터를 입력하면 NULL이 반환됩니다
- MINUTE() 함수는 시간 정보에서 "분(Minute)" 값을 추출합니다. 결과는 0부터 59까지의 숫자로 반환됩니다.
- orders 테이블에서 order_date 에서 분 정보만 가져오시오.
SELECT *, minute(order_date)
FROM orders o ;

주의 사항
- **MINUTE()**는 DATETIME, TIME 형식에서만 작동합니다.
- 잘못된 시간 형식이 입력되면 NULL을 반환합니다
- SECOND() 함수는 시간 정보에서 "초(Second)" 값을 추출합니다. 결과는 0부터 59까지의 숫자로 반환됩니다.
- orders 테이블에서 order_date 에서 초 정보만 가져오시오.
SELECT *, second(order_date)
FROM orders o ;

주의 사항
- **SECOND()**는 DATETIME, TIME 형식에서만 작동합니다.
- 잘못된 시간 형식이 입력되면 NULL을 반환합니다:
- DATEDIFF() 함수는 두 날짜 사이의 차이를 일 수로 반환하는 함수입니다. 즉, 시작 날짜와 끝 날짜 간의 일수 차이를 계산합니다.
- 주문일과 배송일의 차이를 계산하고 컬럼명은 'idff' 로 변경하자
SELECT *, DATEDIFF(delivery_date,order_date) as diff
FROM orders o ;

주의 사항
- **DATEDIFF()**는 두 날짜가 DATE 형식이어야만 정확히 작동합니다. 만약 DATETIME 형식의 값을 비교하면 시간 정보는 무시됩니다.
- TIMEDIFF() 함수는 두 시간(또는 날짜와 시간) 값 사이의 차이를 시간, 분, 초 단위로 반환합니다. 이 함수는 두 TIME 또는 DATETIME 값 간의 차이를 구할 때 사용됩니다.
- 주문일과 배송일의 시간차이를 계산하고 컬럼명은 'idff' 로 변경하자
방법1
SELECT *, TIMEDIFF(delivery_date,order_date) as diff
FROM orders o;

방법2
SELECT *, TIMEDIFF('2023-10-05 15:00:00',order_date) as diff
FROM orders o ;

주의 사항
- TIMEDIFF() 함수는 시간만 계산하므로 날짜 차이는 고려하지 않습니다.
- DATETIME 형식에서도 시간과 분, 초만 반환됩니다.
728x90
반응형