본문 바로가기

DB/MY-SQL

[MY-SQL] 현재(오늘)부터 특정일 까지를 구하는 Query문(between, subdate) + 오늘 기준 이번주, 이번달 구하는 Query문

query 문을 이용해서 오늘부터 특정일까지에 쓰여진 글들의 갯수를 구하고자 한다.

만약에 아래와 같이 한다고 하면
 
select count(*) from board where regdate >= @@@ and regdate <= now();

@@@에 '2006-07-25' 라고 넣으면 잘 되지만 오늘부터 특정날이 아닌 오늘을 기준으로 범위를 구하려고 하면 문제가 된다.

즉, 어제부터 오늘의 경우
오늘은 계속 바뀌기 때문에 어제의 날짜도 계속 바뀌게 된다.

now()-1 같은 소스는 통하지 않기 때문이다. 그렇기 때문에

between을 사용해야 된다.

select count(*) cnt from board
where regdate between subdate(now(), interval 1 DAY) and now();

이렇게 하면 해결을 할 수 있다.

여기서
cnt는 count가 표시될 컬럼명
regdate는 db에 날짜가 들어가는 컬럼명이고(데이타형식은 date)

subdates()는 지난 날을 계산 할때 사용하는 함수
adddate()는 앞으로의 날짜 계산에 사용하는 함수 

now()는 현재날짜, interval 1 day는 여기서는 1일의 간격을 나타낸다. 7이면 일주일 전의 날짜가 나온다.

출처 : http://www.okjsp.pe.kr/seq/73259, sql 초보님의 글을 정리.


--------------------------------------------
오늘이 7월 16일이라고 할때

금주는 : 7월 14일 ~ 7월 20일까지
where date between adddate(curdate(), -weekday(curdate()))  and  adddate(curdate(), 6-weekday(curdate()));


한달은 : 7월 1일 ~7월 31일까지
where date between adddate(curdate(), 1-dayofmonth(curdate())) and last_day(curdate());