Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从过去7天中选择行的最佳方式是什么?_Sql_Mysql_Datetime - Fatal编程技术网

Sql 从过去7天中选择行的最佳方式是什么?

Sql 从过去7天中选择行的最佳方式是什么?,sql,mysql,datetime,Sql,Mysql,Datetime,仅从表中选择在过去7天内创建的行的最佳方法是什么 MySQL中有几十个时间和日期函数,我对最简单的方法有点困惑 对于这个问题,假设您有一个名为“my_table”的表,其中包含一行“created_at”,这是一个日期时间 SELECT * FROM my_table WHERE ... 在WHERE条款中你要填什么 ...WHERE created_at >= Date_Add(now(), INTERVAL -7 DAY) 这是我喜欢的方式,因为它太…清晰了。但是ADDDATE也可

仅从表中选择在过去7天内创建的行的最佳方法是什么

MySQL中有几十个时间和日期函数,我对最简单的方法有点困惑

对于这个问题,假设您有一个名为“my_table”的表,其中包含一行“created_at”,这是一个日期时间

SELECT * FROM my_table WHERE ...
在WHERE条款中你要填什么

...WHERE created_at >= Date_Add(now(), INTERVAL -7 DAY)

这是我喜欢的方式,因为它太…清晰了。但是
ADDDATE
也可以(为了清晰起见,您也可以将
INTERVAL
表单与之一起使用;它的默认值是天,因此您可以看到有人将其取消)。您不想在
created_at
上进行计算,并将其与
now()
进行比较,因为这需要在
created_at
上对每一行进行计算(假设MySQL没有对其进行优化),而修改
now()
与在创建的未修改的
进行比较意味着MySQL只执行一次该位,并在与行进行比较时使用结果,更不用说索引了。

。。。。。。其中创建时间>=日期子日期(当前日期,间隔7天)

 WHERE  ADDDATE(datefield, 7) > NOW();

希望这将有助于

WHERE DATEDIFF(NOW(),created_at)从my_table WHERE my_table.datefield>sysdate-7中选择*。但是如果你使用一种语言来构建你的查询,那将改变一些事情。@brandon,不是真的,你应该使用数据库来实现这一点,而不是应用层。做同样的事情有很多方法。所以社区rox@拜伦:是的,MySQL也是如此,尽管正如Richard所说,哇,多么令人眼花缭乱的日期/时间函数数组。:-)@Brandon Hansen:我实际上在使用Zend框架及其组件(Zend_Db_Table,Zend_Db)来创建sql查询,但这并没有改变任何事情。你可以把一个where对象和一个像'and field=5'这样的字符串连接起来。嘿,我喜欢这个:)它非常简单和干净:)@Drew。。我可能错了。。但该查询是否会首先转换所有创建的记录,然后进行匹配?这不是一个开销,然后反过来进行匹配吗?@Sab:我怀疑你是对的,特别是如果
处创建了一个索引(它确实有索引,对吗?)。这当然会使优化器的工作更加困难,但需要进行基准测试,看看它是否能克服。我还没有查看函数,但请注意简单地说“从现在开始超过7天”,因为如果它是下午的1,许多这类函数只返回最后一个
7*24小时的结果
,因此忽略了第一天下午1点之前的任何记录。这就是为什么我的答案在任何时间戳引用周围使用
DATE()
,实际上创建的时间戳引用没有索引,因为它没有太多使用,我只在一个页面的where子句中使用它。哇,真不敢相信没有人注意到
DATE\u Add
中缺少下划线。我已经。。。补充。。。它.-)
WHERE DATEDIFF(NOW(), created_at) <= 7;
SELECT * FROM my_table
WHERE DATE(created_at) >= SUBDATE(DATE(NOW()), 7)