본문 바로가기
DB/문법

MySQL 날짜와 시간 조회, 가감산, 합계 함수

by ssury94 2024. 11. 29.
 
 
 

현재를 기준으로 조회

현재 날짜와 시간을 조회하기 now()

SELECT now();

localtime = 한국 (KST) UTC+9시간이 아닌 UTC 세계 표준 시간 기준 현재 날짜와 시간이 나옵니다.

 

 

UTC란?

전 세계적으로 통일된 시간 기준을 제공하며

컴퓨터 시스템과 서버 간의 시간 동기화, 네트워킹에서 데이터 기록, 로그 관리, 시간 동기화 등에 필수적으로 사용됩니다.

 

UTC는  ISO 8601 표준에 따라 날짜와 시간을 표현하는 데 사용되며,

"2023-12-24T15:00:00Z"와 같은 형식으로 나타낼 수 있습니다. 여기서 'Z'는 UTC를, 'T'는 날짜와 시간을 구분합니다.

 

TimeStamp 에선 YYYY-MM-DD HH:MM:SS  로 반환됩니다.

 

현재 날짜만 조회 curdate()

SELECT curdate();

 

현재 시간만 조회 curtime()

SELECT curtime();

 


날짜데이터의 특정 값 가져오기

order 테이블에서 order_date의 년도만 가져오세요. year()

SELECT YEAR (order_date )
FROM orders o ;

 

같은 원리로 아래 함수도 사용 가능!

Month(), 일 day(), 시간 hour(), 분 minute(), 초 second()

 


날짜 차이 계산하기

두 날짜간 차이 계산 datediff()

SELECT *,DATEDIFF(delivery_date,order_date) as delivery_days
FROM orders o ;

 

두 시간간의 차이 계산 timediff()

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

 

 

-- 주문일로부터 3일 후의 날짜를 구하세요.

SELECT order_date,date_add(order_date,INTERVAL 3 DAY)
FROM orders o ;

 

INTERVAL 키워드 :

추가되는 값이 단순한 숫자가 아닌 시간 간격임을 명확히 함

interval 3 DAY 처럼 interval 키워드와 숫자, 간격단위에 각각 공백이 필요함

DAY는 소문자 아닌 대문자로 쓰는것을 권장

 


ADDDATE()와 DATE_ADD()의 차이는?

기본 기능: 두 함수 모두 날짜에 시간 간격을 더하는 데 사용됩니다.

 

DATE_ADD()

단일 구문만 지원 INTERVAL 키워드 필수!

DATE_ADD(date, INTERVAL expr unit)

 

 

ADDDATE()

ADDDATE 함수는 INTERVAL 키워드를 사용하지 않고도 날짜에 간격을 추가할 수 있습니다. 숫자=DAY

ADDDATE(date, INTERVAL expr unit)


-- 08/01/02에 31일을 더합니다.
ADDDATE(expr, days)
SELECT ADDDATE('2008-01-02', 31);

 

 


 

 

-- 2일전의 날짜는?

SELECT date_sub(order_date,INTERVAL 2 DAY)
FROM orders o ;

 

DATEDIFF()DATE_SUB()의 차이는?

 
DATE_SUB() DATEDIFF()
주어진 날짜에서 특정 기간을 뺀 새로운 날짜를 반환합니다 두 날짜 사이의 차이를 일 수로 계산합니다
DATE_SUB(date, INTERVAL value interval) DATEDIFF(date1, date2)
DATE_SUB(NOW(), INTERVAL 1 DAY)는 현재 날짜에서 1일을 뺀 날짜를 반환합니다
DATEDIFF('2019-07-27', activity_date)는 '2019-07-27'과 activity_date 사이의 일 수 차이를 반환합니다

 


Group by로 날짜데이터를 그룹화 하여 불러올 수도 있다!

 

 

주 당 주문건수 확인

SELECT week(order_date), count(*)
FROM orders o
group by week(order_date) ;

 

월 당 주문건수 확인

SELECT month(order_date), count(*)
FROM orders o
group by month(order_date) ;

 

시간 당 주문건수 확인, order by로 정렬도 가능!

SELECT HOUR(order_date)as hour, count(*) as cnt
from orders o
group by hour(order_date)
order by hour asc;