SQL을 사용하여 지난 24 시간 동안 레코드를 선택하는 방법은 무엇입니까?


185

where지난 24 시간 동안 레코드를 검색하는 데 사용할 수 있는 절을 찾고 있습니까?


1
이 레코드에 타임 스탬프 필드가 있습니까?
Shawn Steward

답변:


101
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

6
레코드가로 저장 DATETIME되면 시간 부분을 무시하고 이전 날짜의 모든 레코드를 선택합니다. 에서 실행 23:59:59된 쿼리는 마지막 48시간이 아닌 모든 레코드를 반환합니다 24.
Quassnoi

18
날짜 시간 필드에서 지난 24 시간을 선택하려면 'curate ()'를 'now ()'로 대체하십시오. 시간도 포함됩니다.
Haentz

564

에서 MySQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - INTERVAL 1 DAY

에서 SQL Server:

SELECT  *
FROM    mytable
WHERE   record_date >= DATEADD(day, -1, GETDATE())

에서 Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

에서 PostgreSQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - '1 day'::INTERVAL

에서 Redshift:

SELECT  *
FROM    mytable
WHERE   record_date >= GETDATE() - '1 day'::INTERVAL

에서 SQLite:

SELECT  *
FROM    mytable
WHERE   record_date >= datetime('now','-1 day')

에서 MS Access:

SELECT  *
FROM    mytable
WHERE   record_date >= (Now - 1)

3
나는 mysql에 대한 쿼리를 시도하지만 예를 들어 오전 2시에서 오전 2시에서 2시 사이에 레코드를 얻습니다. 24 시간 대신 2 시간 만. 어떤 아이디어?
마 노스

여기에 제공된 솔루션과 매우 흡사합니다. MySQL에서 주목 한 것은 Guillaume Flandre 솔루션 의 성능 이 더 빠르다는 것입니다.
oneworld

1
Amazon Redshift에서는을 얻습니다 function getdate() does not exist. 그것을 교체하고 current_date잘 작동했습니다.
FloatingRock

1
이 답변은 이것을 북마크하고 싶을 때 "별표"버튼이 있기를 바랍니다.
Brian Risk

1
@Manos MySQL에서는 CURDATE()시간 부분이있는 날짜를 반환하지 않는 것 같습니다 00. NOW()대신을 사용하여 수정했습니다 CURDATE().
4castle

21

MySQL :

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)

간격은 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 일 수 있습니다.

예를 들어 지난 10 분 동안

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)

3
이것은 특정 질문에 가장 잘 맞는 답입니다. 이전 24 시간 (이전 날의 모든 결과를 제안 함)과는 반대로, 현재 24 시간 (현재 순간부터)을 반환하는 방법. 이것은 내 요구 사항에 대답했고, 이것은 내 투표를 얻습니다. 편집 : table_name.the_date 열은 타임 스탬프 여야합니다.
Anthony Cregan

8

지정되지 않은 SQL, SQL 2005/2008

SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())

2008 년 정확도가 향상된 날짜 유형을 사용하는 경우 UTC 시간을 내부적으로 UTC 호출로 바꾸는 경우 새 sysdatetime () 함수를 대신 사용하십시오.


7

필드 유형이 타임 스탬프라고 가정하면 postgres에서 :

date_field> (now ()-interval '24 hour ') 인 테이블에서 *를 선택하십시오.


4

고려 된 타임 스탬프가 UNIX 타임 스탬프 인 경우 먼저 UNIX 타임 스탬프 (예 : 1462567865)를 mysql 타임 스탬프 또는 데이터로 변환해야합니다.

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

FROM_UNIXTIME ()이 MySQL 함수이므로 사용되는 엔진이 MySQL이라고 가정합니다. SQL Server 사용 : SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) SQL Server 2016 이상에서 밀리 초 정확도가 필요한 경우 다음을 사용하십시오. SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
luisdev


2

안녕하세요, 이제 원래 게시물에서 많은 시간이 지났지 만 비슷한 문제가 발생하여 공유하고 싶습니다.

YYYY-MM-DD hh : mm : ss 형식의 날짜 시간 필드가 있고 하루 종일 액세스하고 싶으므로 여기에 해결책이 있습니다.

MySQL의 DATE () 함수 : 날짜 또는 날짜 / 시간 표현식의 날짜 부분을 추출하십시오.

SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'

이것으로 나는 오늘의 모든 행 레지스터를 얻습니다.

나는 누군가의 도움을 바랍니다.


이것은 mySQL에서 나를 위해 일한 유일한 것입니다. 어떤 이유로 내가 SELECT * FROM myTable WHERE myDate> DATE_SUB ( '2018-06-13 00:00:00', INTERVAL 24 HOUR); 나는 2018-06-14에서 여전히 기록을 얻었습니다.
jDub9 2016 년

1
SELECT * 
FROM tableName 
WHERE datecolumn >= dateadd(hour,-24,getdate())

1

SQL Server에서 (최근 24 시간 동안) :

SELECT  *
FROM    mytable
WHERE   order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()

2
지난 24 시간 동안 이미 쿼리 실행 시점을 찾고있을 때 "and order_date <= GETDATE ()"를 추가해야하는 이유는 무엇입니까? "GETDATE"가 이미 언급 된 경우 where 절에 해당 부분이있는 것은 의미가 없습니다. "order_date> = DateAdd (DAY, -1, GETDATE ())"가 더 좋습니다!
KMX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.