NOW () -1 일부터 레코드 선택


138

MySQL 문장에서 날짜 스탬프를 통해> = NOW () -1로 레코드를 주문하는 방법이 있습니까? 그래서 오늘부터 미래까지 모든 레코드가 선택됩니까?

답변:


269

날짜 / 시간 기능 에 대한 문서를 보면 다음과 같은 작업을 수행 할 수 있어야합니다.

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

지금 얻는 방법 .. db에서 사용 가능한 모든 레코드의 현재 날짜를 의미합니다. ? 이것은 단지 하루 동안이지만 지금은 모든 기록이 필요합니다. @jon
Muddasir Abbas

레코드가 UTC 일 때 사용자의 현지 시간을 고려합니까?
Adry

1
@Adry : 의심 스럽지만 신중하게 테스트해야합니다.
Jon Skeet

62

결과가 예상과 약간 다를 수 있습니다.

NOW()를 반환합니다 DATETIME.

그리고 INTERVAL예를 들어 명명 된대로 작동합니다 INTERVAL 1 DAY = 24 hours.

따라서 스크립트가에서 실행되면 c 03:00가 누락 first three hours of records from the 'oldest' day됩니다.

하루 종일 사용하려면 CURDATE() - INTERVAL 1 DAY. 스크립트 실행시기에 관계없이 전날의 시작 부분으로 돌아갑니다.


CURDATE ()에 대한 투표까지
강탈



8

제대로 사용하는 모든 답변을 참조하지 않았 DATE_ADD거나를 DATE_SUB:

에서 1 일 빼기 NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

에서 하루 추가 NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

1

검색 필드가 타임 스탬프이고 어제 0 시간부터 오늘 0 시간까지의 레코드를 찾으려면 건설 사용

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

대신에

 now() - interval 1 day
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.