날짜함수 변환 STR_TO_DATE

아뇨 민균데요·2025년 5월 19일
0

📅 날짜와 시간 다루기 (Date Functions)


1. 기본 날짜와 시간 형식

  • 문자열이나 날짜 형태로 저장된 데이터는 그대로 비교하면 오류가 날 수 dlTdma
  • 보통 YYYY-MM-DD 또는 YYYY-MM-DD HH:MM:SS 형식을 사용

2. 날짜 형식 변환하기 (STR_TO_DATE)

  • 문자열을 날짜 형식으로 변환
SELECT STR_TO_DATE('2023-05-19 15:30:00', '%Y-%m-%d %H:%i:%s');
  • STR_TO_DATE: 문자열을 날짜로 변환
  • '%Y-%m-%d %H:%i:%s': 연-월-일 시:분:초 형식
  • 출력 예시: 2023-05-19 15:30:00

3. 날짜에서 원하는 부분만 추출하기 (DATE_FORMAT)

  • 연도와 월만 추출
SELECT DATE_FORMAT(STR_TO_DATE('2023-05-19 15:30:00', '%Y-%m-%d %H:%i:%s'), '%Y-%m') AS month;
  • DATE_FORMAT: 날짜에서 특정 형식으로 변환
  • '%Y-%m': 연-월 형식
  • 출력 예시: 2023-05

4. 더 간단한 방법 (LEFT)

  • LEFT로 앞 7자리만 자르기
SELECT LEFT('2023-05-19 15:30:00', 7) AS month;
  • LEFT: 문자열의 앞 몇 글자만 가져오기
  • 출력 예시: 2023-05
  • 단순히 앞에서 7자리만 자르기 때문에 DATE_FORMAT보다는 덜 엄격함

5. 날짜 비교하기

  • 두 날짜를 비교할 때는 날짜 형식으로 변환한 후 비교해야 정확함
SELECT * 
FROM marketer_orders 
WHERE STR_TO_DATE(order_purchase_timestamp, '%Y-%m-%d %H:%i:%s') < NOW();
  • NOW(): 현재 시각을 반환
  • STR_TO_DATE: 문자열을 날짜로 변환

6. 날짜를 기준으로 데이터 묶기 (GROUP BY)

  • 월별 주문 수 계산하기
SELECT DATE_FORMAT(STR_TO_DATE(order_purchase_timestamp, '%Y-%m-%d %H:%i:%s'), '%Y-%m') AS month, 
       COUNT(*) AS cnt_orders 
FROM marketer_orders 
GROUP BY month;
  • 같은 월의 데이터끼리 묶어서 개수 세기
  • 출력 예시
    | month | cnt_orders |
    |---------|------------|
    | 2023-05 | 120 |
    | 2023-06 | 150 |

7. 비율 계산하기 (ROUND)

  • 월별 주문 비율 계산하기
SELECT DATE_FORMAT(STR_TO_DATE(order_purchase_timestamp, '%Y-%m-%d %H:%i:%s'), '%Y-%m') AS month, 
       COUNT(*) AS cnt_orders, 
       ROUND(COUNT(*) / (SELECT COUNT(*) FROM marketer_orders) * 100, 2) AS order_ratio_percent 
FROM marketer_orders 
GROUP BY month;
  • ROUND: 소수점 둘째 자리까지 깔끔하게
  • 출력 예시
    | month | cnt_orders | order_ratio_percent |
    |---------|------------|---------------------|
    | 2023-05 | 120 | 20.00 |
    | 2023-06 | 150 | 25.00 |
profile
this man을 꿈 속에서 보신 적이 있으신가요?

0개의 댓글