如何使用SQL选择过去24小时内的记录?


Answers:


100
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小时,请用“ now()”替换“ curate()”。这也包括时间。
恩茨2011年

562

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,但是例如如果它是2AM,则从00-02 AM获取记录。只需两个小时,而不是24小时。
Manos 2014年

我非常喜欢这里提供的解决方案,就像我在MySQL中指出的那样,Guillaume Flandre解决方案的性能更快。
oneworld 2014年

1
在Amazon Redshift中,我得到了function getdate() does not exist。替换为它,current_date效果很好。
FloatingRock

1
这个答案使我希望有一个“星号”按钮,因为我想为此添加书签。
布莱恩·

1
@Manos在MySQL中,CURDATE()似乎没有返回带有时间部分的日期,因此转到00。我使用NOW()代替修复了它CURDATE()
20:39 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列应该是一个时间戳。
安东尼·克雷根

8

未指定哪个SQL,SQL 2005/2008

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

如果您使用的是2008年精度更高的日期类型,请改用新的sysdatetime()函数,如果内部使用UTC时间交换到UTC调用,则同样使用。


7

在postgres中,假设您的字段类型是时间戳记:

从表中选择*,其中date_field>(now()-间隔“ 24小时”);


4

如果考虑的时间戳是UNIX时间戳,则需要先将UNIX时间戳(例如1462567865)转换为mysql时间戳或数据。

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

假设正在使用的引擎是MySQL,因为FROM_UNIXTIME()是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上为我工作的软件。由于某些原因,当我尝试在myDate中选择SELECT * FROM myDate> DATE_SUB('2018-06-13 00:00:00',INTERVAL 24 HOUR); 我仍然从2018-06-14获得记录。
jDub9

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.