ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL에서 시간을 다루는 함수들: NOW(), CURDATE(), TIMEDIFF() 등 알아보기
    🐬 MySQL/MySQL 함수 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
Designed by Tistory.