MSSQL - 조건절에 DATEPART 0 2 721

by 한번사는인생 [SQLServer] [2020.06.03 18:16:44]


일단 웹 개발자입니다.(밑밥이라고 생각해주셔요)

웹 개발자면서 DB까지 다루고 있는데 초보라 여쭈어봅니다.

where 조건 좌변에는 본연의 컬럼 이외의 함수를 사용하지 않는 것이 원칙이라고 생각하고 있습니다.

 

근데 이번에,

여러 년/월 에 대해 검색하는 페이지를 만들게 되었습니다.

예를 들어서, 2018년 / 2019년 / 2020년 그리고 1월 / 2월 / 3월 에 등록되어진 데이터의 합계를 구하는 페이지 입니다.

검색대상 컬럼은 DATETIME으로 등록되어져 있어서,

여차저차 

WHERE DATEPART(yy, regdate) IN ('2018', '2019', '2020')
AND DATEPART(mm, regdate) IN ('1', '2', '3')

위에와 같이 코드를 작성했습니다.

좌변에 DATEPART를 써도 되는지 성능상 문제가 없는지 궁금합니다.

아니면 다른 방법이 있으면 조언 부탁드립니다.

by 마농 [2020.06.03 18:38:40]

인덱스 컬럼이라면?
 - 가공 조건은 그대로 둔 채  --> filter 조건으로 사용
 - 범위 조건을 하나 더 추가하세요.  --> Access 조건으로 사용
인덱스 컬럼이 아니라면?
 - 그냥 가공조건 줘도 됩니다.
OR 로 해서
 - 범위 조건 여러개 줄 수도 있습니다.
 

SELECT *
  FROM t
 WHERE regdate >= '2018-01-01'
   AND regdate <  '2020-04-01'
   AND DATEPART(mm, regdate) IN ('1', '2', '3')
;
SELECT *
  FROM t
 WHERE (  (regdate >= '2018-01-01' AND regdate < '2018-04-01')
       OR (regdate >= '2019-01-01' AND regdate < '2019-04-01')
       OR (regdate >= '2020-01-01' AND regdate < '2020-04-01')
       )
;

 


by 한번사는인생 [2020.06.03 21:08:08]

오. regdate값을 >= / < 으로 주는건 생각도 못했었는데 고맙습니다.

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