Development/Python

[MySQL] 주별로 쿼리 조회

곽진돔 2023. 4. 12. 15:06

오라클에는 아래 쿼리처럼, 함수가 있어서 포맷만 지정하면 편하게 사용할 수 있지만 mysql 에서 주별로 데이터를 조회하려면 함수가 없어서 직접 작성해주어야한다.

SELECT d "Original Date",   
       trunc(d) "Nearest Day, Time Removed",   
       trunc(d, 'ww') "Nearest Week", 
       trunc(d, 'iw') "Start of Week",   
       trunc(d, 'mm') "Start of Month",   
       trunc(d, 'year') "Start of Year"   
FROM dates;

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/TRUNC-date.html#GUID-BC82227A-2698-4EC8-8C1A-ABECC64B0E79

 

SQL Language Reference

 

docs.oracle.com

 

그래서 아래처럼, 날짜를 계산해서 넣어주는 방식을 이용한다. 계산한 컬럼값을 concat으로 합쳐서 반환하여 조회할 수 있다.

기존 코드

concat( date_format(sd_ymd,'%Y %m '), weekofyear(sd_ymd) - weekofyear(LAST_DAY(sd_ymd - interval 1 month) +
interval 1 DAY ) +1 ) as sd_ymd  ,

다른 월은 잘 출력 되었으나1월에서 오류 발생

  • LAST_DAY() : 인자값의 마지막일을 반환하는 함수

변경한 코드

concat( date_format(sd_ymd,'%Y %m '), WEEK(sd_ymd, 5) - WEEK(DATE_SUB(sd_ymd, INTERVAL DAYOFMONTH(sd_ymd) - 1 DAY), 5) + 1 ) as sd_ymd  ,

  • DATE_SUB() : 시간 빼기