MySQL에서 날짜 시간이 오늘보다 크거나 같음


175

다음을 수행하는 가장 좋은 방법은 무엇입니까?

SELECT * FROM users WHERE created >= today;

참고 : 작성은 날짜 / 시간 필드입니다.

답변:


329
SELECT * FROM users WHERE created >= CURDATE();

하지만 난 당신이 의미하는 것 같아 created < today


11
CURDATE()시간이 아닌 날짜 만 반환
Shakti Singh

20
@ n00b 미래에 생성 된 사용자를 어떻게 보유하고 있습니까? 재미있는 =) 게시물이 아직 만료되었는지 확인하기 위해 이것을 사용했습니다.
Garet Claborn

75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

더 읽기 : http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html


6
어쩌면 누락 된 것이 있지만 DATETIME 유형의 경우 CURDATE () 솔루션이 작동하지 않습니다. 그렇습니다.
Jahmic

또한 DATE () 함수를 통해 DATETIME을 날짜로 변환 한 다음 where 조건과 비교하는 오버 헤드가 있으므로 시간이 오래 걸립니다.
roopunk

열에 함수를 사용하지 않으면 쿼리에서 인덱스를 무시하여 쿼리 속도가 느려집니다. 대안 접근 방식에 대한 내 대답을 확인하십시오 stackoverflow.com/a/42365426/4311336
Bsienn

33
SELECT * FROM users WHERE created >= NOW();

열이 날짜 시간 유형 인 경우


1
내 말은 오늘 지금하지 : D 나는 2011-03-03처럼 오늘날하지 2011-03-03 14시 2분 2초 필요
n00b

@ n00b : 시간이 포함되어 있으면 오늘보다 큰 행을 반환 걱정하지 마십시오
Shakti Singh

3
2011-02-02 14:02:02-10:02:02에 생성 된 사용자는 "오늘"생성 되었더라도 버전에서 반환되지 않습니다. :)
n00b

@ n00b : Lol ya, 우리 만 시간을 멈출 수 있다면 사용자가 반환되지 않습니다.
Mike Purcell

15

'만들기'가 날짜 / 시간 유형 인 경우

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE ()는 '2013-05-09 00:00:00'도 의미합니다


고마워 실제로 DATE_SUB (같은 방식으로 사용)가 필요했지만 올바른 경로에 있습니다.
Daniel 가격

날짜에 0이 포함 된 데이터는 반환되지 않습니다. 즉 '2013-05-09 00:00:00'이 누락됩니다
Bsienn

8

답변이 잘못되었습니다. 언급 된 문제는 DateTime, 그러나 필요한 것은 단지 언급 된 것 CURDATE()입니다.

이에 대한 가장 짧은 정답 은 다음과 같습니다.

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

5

열에 인덱스가 있고 함수가 열에 적용되면 인덱스가 작동하지 않고 전체 테이블 스캔이 발생하여 쿼리 속도가 느려집니다.

인덱스를 사용하고 날짜 / 시간 을 오늘 / 현재 날짜 와 비교하기 위해 다음을 사용할 수 있습니다.

OP 솔루션 :

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

오늘 데이터를 얻는 샘플 :

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')

또는 짧게 BETWEEN을 사용하십시오.

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')

2
SELECT * FROM users WHERE created >= now()

오늘부터이 순간 이전의 레코드는 반환하지 않습니다.
gsziszi

0

아래 코드는 저에게 효과적이었습니다.

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today

-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date [ "05/11/2011"]


이것은 매우 원시적 인 솔루션입니다.
IgniteCoders

-5

if 문 내에서 모든 행을 반환하고 php datediff 함수를 사용할 수 있지만 서버에 추가로드가 발생합니다.

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}

4
이것은 데이터베이스 선택에 비해 매우 느립니다
IgniteCoders
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.