【发布时间】:2009-12-11 14:49:02
【问题描述】:
我正在寻找可用于检索过去 24 小时记录的where 子句?
【问题讨论】:
-
这些记录上是否有时间戳字段?
我正在寻找可用于检索过去 24 小时记录的where 子句?
【问题讨论】:
在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)
【讨论】:
function getdate() does not exist。将其替换为 current_date 并且效果很好。
CURDATE() 似乎没有返回带有时间部分的日期,所以它转到00。我通过使用NOW() 而不是CURDATE() 来修复它。
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
【讨论】:
DATETIME,这将选择上一个日期的所有记录,忽略时间部分。在23:59:59 运行,查询将返回最近48 小时的所有记录,而不是24。
SELECT *
FROM tableName
WHERE datecolumn >= dateadd(hour,-24,getdate())
【讨论】:
MySQL:
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
间隔可以是年、月、日、小时、分钟、秒
例如,过去 10 分钟内
SELECT *
FROM table_name
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
【讨论】:
您好,我现在从原始帖子过去了很多时间,但我遇到了类似的问题,我想分享一下。
我有一个格式为 YYYY-MM-DD hh:mm:ss 的日期时间字段,我想访问一整天,所以这是我的解决方案。
MySQL 中的 DATE() 函数:提取日期或日期时间表达式的日期部分。
SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'
有了这个,我得到了这一天所有的行寄存器。
我希望它对任何人都有帮助。
【讨论】:
在 postgres 中,假设您的字段类型是时间戳:
select * from table where date_field > (now() - interval '24 hour');
【讨论】:
在 SQL Server 中(过去 24 小时):
SELECT *
FROM mytable
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()
【讨论】:
select ...
from ...
where YourDateColumn >= getdate()-1
【讨论】:
如果考虑的时间戳是 UNIX 时间戳 您需要先将 UNIX 时间戳(例如 1462567865)转换为 mysql 时间戳或数据
SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
【讨论】:
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) 如果您在 SQL Server 2016 及更高版本中需要毫秒精度,请使用:SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
未指定哪个 SQL,SQL 2005 / 2008
SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
如果您使用的是 2008 年精度更高的日期类型,请改用新的 sysdatetime() 函数,如果在内部使用 UTC 时间交换到 UTC 调用,则同样如此。
【讨论】:
在 Oracle 中(过去 24 小时):
SELECT *
FROM my_table
WHERE date_column >= SYSDATE - 24/24
如果出于任何原因,您有未来日期的行,您可以使用 between,如下所示:
SELECT *
FROM my_table
WHERE date_column BETWEEN (SYSDATE - 24/24) AND SYSDATE
【讨论】: