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());
'DB > MY-SQL' 카테고리의 다른 글
[MY-SQL] 날짜 함수( ADDDATE, DATE_ADD, CURDATE, CURTIME, NOW ) (0) | 2011.11.18 |
---|---|
[MY-SQL] mysql_fetch_row, mysql_fetch_array, mysql_fetch_assoc (0) | 2011.11.17 |
[MY-SQL] DB 테이블 연산자 - JOIN 연산자 (두 개 이상 테이블 간의 비교검색) (0) | 2011.11.17 |
[MY-SQL] 서브쿼리 - 두 개 이상의 SQL쿼리 조합하기 (0) | 2011.11.17 |
[MY-SQL] where 1=1? (0) | 2011.11.16 |