🐬 MySQL/MySQL 함수

시간 함수 문제 풀이- 숙지 후 정리 예정

itstory(Booho) 2024. 12. 2. 11:32
728x90

주문이 이루어진 날짜와 요일 조회
각주문의 날짜와 요일(한글) 정보를 조회하세요

SELECT *,month(order_date) as oder_month

FROM orders o ;


월별 주문 수 조회
각 월별로 이루어진 주문량을 조회하세요

특정 월의 주문 내역 조회
12월에 이루어진 주문 내역을 조회하세요

주문과 배송 날짜 간의 일수 차이 계산
각 주문에 대해 주문일과 배송일 사이의 일수 차이를 계산하여 조회하세요.

하루 안에 처리된 주문 조회
주문일과 배송일이 동일한, 죽 하루안에 처리된 주문들을 조회하세요

가장 최근에 이루어진 주문 조회
가장 최근에 이루어진 주문의 정보를 조회하세요

평일과 주말 구분하여 주문 조회
각 주문이 평일에 이루어졌는지 주말에 이루어졌는지를 구분하여 조회하세요
(평일 또는 주말로 표시)

배송 예정인 주문 조회
주문일을 기준으로 정확히 4일 후에 배송이 예정된 주문 내역을 조회하세요

특정 시간대(오전/오후)에 이루어진 주문 조회
오전(00:00-15:59) 과 오후(12:00-223:59) 에 이루어진 주문들을 구분하여 조회하세요
이 컬럼명은 order_period로 하세요

배송 예정일이 임박한 주문 조회
오늘 기준으로 앞으로 3일 이내에 배송이 예정된 주문들을 조회하세요

 

 

-- 현재 날짜와 시간을 조회하는 함수 : now()

-- now()안에 아무것도 넣지 않으면 서버가 시간이 나온다 (AWS 서버 시간)

-- UTC : 서버는 기준점이 정확한 UTC를 기준으로 진행 된다

-- Localtime

 

-- 연 월 일 시 분 초

SELECT now();

 

-- 현재 날짜만 조회 : curdata()

SELECT CURDATE();

 

-- 현재 날짜만 조회 : curdata()

SELECT CURtime();

 

-- orders 테이블에서 order_date 에서 년도만 가져오시오.yesr()

SELECT *,year(order_date)

FROM orders o ;

 

-- orders 테이블에서 order_date 에서 월 정보만 가져오시오.month()

SELECT *, month(order_date )

FROM orders o ;

 

-- orders 테이블에서 order_date 에서 일 정보만 가져오시오.day()

SELECT *, day(order_date )

FROM orders o ;

 

-- orders 테이블에서 order_date 에서 주 정보만 가져오시오.day()

SELECT *, week(order_date )

FROM orders o ;

 

-- orders 테이블에서 order_date 에서 시 정보만 가져오시오.hour()

SELECT *, hour(order_date )

FROM orders o ;

 

-- orders 테이블에서 order_date 에서 분 정보만 가져오시오. minute()

SELECT *, minute(order_date )

FROM orders o ;

 

-- orders 테이블에서 order_date 에서 초 정보만 가져오시오.second()

SELECT *, second(order_date )

FROM orders o ;

 

-- 두 날자간의 차이 계산 : datediff()

-- 주문일과 배송일의 차이를 계산해보자

SELECT *, DATEDIFF(delivery_date,order_date) as diff

FROM orders o ;

 

-- 시간차이 계산 : timediff()

SELECT *, TIMEDIFF(delivery_date,order_date) as diff

FROM orders o ;

 

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

FROM orders o ;

 

SELECT *

FROM orders o ;

 

SELECT TIMEDIFF(delivery_date, order_date)

from orders;

 

 

-- 현재시간과 물건 구매일자를 비교해서 알려주려면 'now'

SELECT *, TIMEDIFF('now',order_date) as diff

FROM orders o ;

 

 

-- 주문일로부터 3일 후의 날짜를 구하시오

-- 푸쉬알람

SELECT order_date,

DATE_ADD(order_date, INTERVAL 3 day)

from orders o ;

 

 

-- 주문일로부터 2일 전의 날자를 구하시오.

-- 실 사용예 : 푸쉬알림 ( 주문한지 2이 지났습니다.)

SELECT DATE_SUB((order_date, INTERVAL 2 day)

from orders o ;

 

-- 주간 집계

-- 특정일자의 주문은 몇건인가? , 이번주의 주문은 몇건인가? ,

-- 각주별로 테이터 묶기 > 년월일 시간 분 초가 기재되어 있다. 그렇게 그룹을 묶을

SELECT *, count(*)

FROM orders

group by week(order_date);

 

-- 시간별로 묶어라

SELECT hour(order_date), count(*) as cnt

FROM orders

group by hour(order_date);

 

SELECT hour(order_date), count(*) as cnt

FROM orders

group by hour(order_date)

order by hour asc;

 

-- 오더 데이트를 기준으로 요일을 표기해줘

SELECT *, DAYNAME(order_date)

from orders o ;

 

-- 오더 데이트 기즌으로 한글요일을 표시해줘

SELECT *, DAYNAME(order_date)

case dayname(oder_date)

when 'sunday' then '일요일'

WHEN 'monday'then '월요일'

ELSE

end

from orders o

group by hour(order_date)

order by hour asc;

 

 

-- 요일을 숫자로 알려주는 방식

 

SELECT *, DAYOFWEEK(order_date)

from orders o ;

 

-- 오류발생.. 집에서 한번 해보자

SELECT order_date,

case DAYOFWEEK(order_date)

when 1 then '일요일'

when 2 then '월요일'

when 3 then '화요일'

when 4 then '수요일'

when 5 then '목요일'

when 6 then '금요일'

when 7 then '토요일'

END as wookday

from orders o ;

 

-- 월별 주문 수 조회

-- 각 월별로 이루어진 주문량을 조회하세요

SELECT MONTH(order_date),count(*)

FROM orders o

group by MONTH(order_date) ;

 

-- 특정 월의 주문 내역 조회

-- 12월에 이루어진 주문 내역을 조회하세요

 

SELECT *

FROM orders o

WHERE MONTH (order_date) = 12;

 

 

-- 주문과 배송 날짜 간의 일수 차이 계산

-- 각 주문에 대해 주문일과 배송일 사이의 일수 차이를 계산하여 조회하세요.

방법 1

SELECT *, DATEDIFF(delivery_date,order_date) as date_diff

from orders o having date_diff=0;

 

방법 2

SELECT *

FROM orders o

WHERE date (order_date) = date(delivery_date);

 

-- 하루 안에 처리된 주문 조회

-- 주문일과 배송일이 동일한, 죽 하루안에 처리된 주문들을 조회하세요

SELECT *

FROM orders o

WHERE date(order_date) = delivery_date

 

 

-- 가장 최근에 이루어진 주문 조회

-- 가장 최근에 이루어진 주문의 정보를 조회하세요

SELECT max(order_date )

FROM orders o ;

 

-- sub query

SELECT *

FROM orders o

WHERE order_date = (SELECT max(order_date )

FROM orders o)

 

-- 평일과 주말 구분하여 주문 조회

-- 각 주문이 평일에 이루어졌는지 주말에 이루어졌는지를 구분하여 조회하세요

-- 요일을 가져오는 방법, dayofweek, dayname weekday(구분 잘 해야함)

-- (평일 또는 주말로 표시)

-- 요일 정보 먼저 추출 후 평일과 주말 구분

 

SELECT *,

case DAYOFWEEK(order_date)

when 1 then '일요일'

when 2 then '월요일'

when 3 then '화요일'

when 4 then '수요일'

when 5 then '목요일'

when 6 then '금요일'

when 7 then '토요일'

end

FROM orders o ;

 

 

SELECT*,

if(DAYNAME(order_date)='sunday' or dayname(order_date)='saturday','주말','평일')

FROM orders o ;

 

SELECT*,

if(DAYofweek(order_date)=1 or DAYofweek(order_date)=7,'주말','평일')

FROM orders o ;

 

 

SELECT*,

if(weekday(order_date) < 5,'주말','평일')

FROM orders o ;

 

 

 

-- 배송 예정인 주문 조회

-- 주문일을 기준으로 정확히 4일 후에 배송이 예정된 주문 내역을 조회하세요

-- 눈으로 먼저 확인하고(selete) 잘되면 where 에 가져와라

 

SELECT *,DATE_ADD(date(order_date),INTERVAL 4 day)

from orders o

WHERE DATE_ADD(date(order_date),INTERVAL 4 day) = delivery_date ;

 

 

-- 특정 시간대(오전/오후)에 이루어진 주문 조회

-- 오전(00:00-15:59) 과 오후(12:00-223:59) 에 이루어진 주문들을 구분하여 조회하세요

-- 이 컬럼명은 order_period로 하세요

 

SELECT *, if(HOUR (order_date) < 12, '오전','오후')

FROM orders o ;

 

-- 배송 예정일이 임박한 주문 조회

-- 오늘 기준으로 앞으로 3일 이내에 배송이 예정된 주문들을 조회하세요

 

-- 오늘 날짜만 가져오는것

SELECT curdate;

-- 오늘 날짜에서 3일 더한것

 

SELECT date_add(CURDATE(), INTERVAL 3 day);

 

-- 오늘 날짜 와 3일후 날짜의 데이터 비교

SELECT CURDATE(),date_add(CURDATE(), INTERVAL 3 day);

 

SELECT *

FROM orders o

WHERE delivery_date >= CURDATE() and delivery_date <= date_add(CURDATE(), INTERVAL 3 day)

 

SELECT *

FROM orders o ;

 

INSERT INTO orders (customer_name,product_name,order_date,delivery_date)

values ('홍길동','의자','2024-12-01 13:30:00', '2024-12-03');

 

 

 

-- 주문일 기준 4일후 도착되는 날짜를 전부 구한식

SELECT *,DATE_ADD(date(order_date),INTERVAL 4 day)

from orders o;

728x90
반응형