ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시간 함수 문제 풀이- 숙지 후 정리 예정
    🐬 MySQL/MySQL 함수 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
Designed by Tistory.