날짜인데 년 월 이 분리되어있습니다. 0 2 967

by 카지노무스 [2021.01.16 16:36:30]


YYYY MM 이렇게 년월이 분리되어 있을 때 최근 3개월 단위로 조회를 하고자 할 때 어떻게 조회해야 할까요 ??? 

SELECT * FROM TBl_STORE

        WHERE CONVERT(DATETIME,EOMONTH(CONCAT(YYYY, RIGHT('0' + CONVERT( NVARCHAR, MM), 2),'01'))) >= DATEADD(MONTH, -3, '20201201')

          AND CONVERT(DATETIME,EOMONTH(CONCAT(YYYY, RIGHT('0' + CONVERT( NVARCHAR, MM), 2),'01'))) <= CONVERT(DATETIME, EOMONTH('20201201'))

현재에는 위와같이 코딩되어있습니다....

최근 3개월 데이터를 조회하려고 할 때 INDEX 컬럼인 YYYY와 MM을 변형하지 않고 어떻게 조회해야 할까요

좋은 조언 부탁드립니다...

by 우롱 [2021.01.18 11:59:43]

MSSQL 의 경우 YEAR(datetime), MONTH(datetime), DAY(datetime) 를 이용해서 년, 월, 일을 따로 가져올 수 있는데 이걸 이요해 보심이 어떨런지요


by 마농 [2021.01.19 12:44:27]

년, 월 따로 관리하는 것은 여러모로 좋지 않습니다.
(년월) 또는 (년월일) 또는 (일시) 형태의 하나의 항목으로 관리하는 것이 좋습니다.
테이블 설계 변경이 불가하다면 컬럼을 가공해서 조건을 줘야 하거나.
컬럼 가공을 안하려면 쿼리가 복잡해 질 수 밖에 없습니다.
 

SELECT *
  FROM tbl_store
 WHERE (  (  yyyy = DATENAME(yy, DATEADD(m, -3, '20201201'))
           AND mm = DATENAME(mm, DATEADD(m, -3, '20201201')))
       OR (  yyyy = DATENAME(yy, DATEADD(m, -2, '20201201'))
           AND mm = DATENAME(mm, DATEADD(m, -2, '20201201')))
       OR (  yyyy = DATENAME(yy, DATEADD(m, -1, '20201201'))
           AND mm = DATENAME(mm, DATEADD(m, -1, '20201201')))
       OR (  yyyy = DATENAME(yy, DATEADD(m, -0, '20201201'))
           AND mm = DATENAME(mm, DATEADD(m, -0, '20201201')))
       )
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입