답변:
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
사용하지 않으려는 사람은 다음을 DATE_SUB
사용하십시오 CURRENT_DATE
.
SELECT CURRENT_DATE - INTERVAL 30 DAY
NOW() - INTERVAL 30 DAY
. 질문에 "현재 날짜 시간 에서 30 일 빼기"가 언급되었으므로 OP가 원하는 것이 아닐 수도 있습니다.
current_timestamp
대신에 사용current_date
NOW()
쿼리 캐싱 또는 최적화가 손실 될 때마다 쿼리가 다르므로 사용하지 마십시오 . MySQL 문서 에서 사용하지 말아야 할 함수 목록을 참조하십시오 .
아래 코드에서이 테이블이 시간이 지남에 따라 커지고 있다고 가정 해 봅시다. 새로운 내용이 추가되었으며 지난 30 일 동안 만 내용을 표시하려고합니다. 가장 일반적인 경우입니다.
날짜가 문자열로 추가되었습니다. NOW()
캐싱을 종료 할 때 함수 를 사용하는 것보다이 방법으로 호출 코드에서 날짜를 추가하는 것이 좋습니다 .
SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);
BETWEEN
이 초 초에서 30 초 전부터 30 초 전까지 물건을 원한다면 사용할 수 있지만 내 경험에서 일반적인 사용 사례는 아니므로 단순화 된 쿼리가 잘 제공되기를 바랍니다.
NOW()
하고 여전히 당신의 대답에 사용하십시오. O_O 추신 : 반환 쿼리 다른 결과, 영업 이익은 아마 싶어하지 무엇을
BETWEEN
그리고 >=
서로 다른 사업자, 당신은 알아요? 내 쿼리의 결과 집합 제한 30 days ago AND today
이, everything after 30 days ago
. 그래서 tomorrow
기록이 광산 원래 쿼리와 일치하지 않습니다,하지만이 답변으로 일치합니다
MySQL은 지금부터 며칠을 뺍니다.
select now(), now() - interval 1 day
인쇄물:
2014-10-08 09:00:56 2014-10-07 09:00:56
다른 간격 시간 표현 단위 인수 :
https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals
select now() - interval 1 microsecond
select now() - interval 1 second
select now() - interval 1 minute
select now() - interval 1 hour
select now() - interval 1 day
select now() - interval 1 week
select now() - interval 1 month
select now() - interval 1 year
시간이 아닌 날짜 만 필요한 경우 :
select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();
때문에 curdate()
생략합니다 시간 구성 요소, 그건 잠재적으로 보다 더 빨리 now()
그리고 당신은 단지 날짜에 관심이있는 경우에 더 "의미 론적으로 올바른".
또한, subdate()
2-arity 과부하가을 사용하는 것보다 빠릅니다 interval
.
interval
하루가 아닌 구성 요소가 필요한 경우를위한 것입니다.
subdate(curdate(), 30)
은 그것보다 더 빨리 주장하고 있습니다 CURRENT_DATE - INTERVAL 30 DAY
. 증거가 있습니까? 그리고 얼마나 빠를까요? 몇 마이크로 초?
subdate
잠재적으로 더 빠를 것이라고 추측합니다. 아마도 당신의 의견으로는 "2-arity overload"에 의해 설명 될 것입니다. )? 특히 "2-arity"는 무엇입니까?
curdate()
OP가 "현재 날짜 시간 에서 30 일을 빼기 "(강조 표시)하기를 원했기 때문에 질문의 문구에 따라 실제로 잘못된 선택 일 수 있습니다 .