mysql - 日期间隔错误

标签 mysql

我有一个表,其中有一个名为created DATETIME的列,当添加条目时它工作正常,但是当它到达日期间隔时,它会继续复制新条目。我正在尝试获取今天和昨天的条目。今天的工作正常,但是对于昨天的,它还在查询结果中添加了今天的内容,这不是我想要的。

SELECT * FROM tab WHERE created > DATE_SUB(NOW(), INTERVAL $num DAY) ORDER BY created DESC LIMIT 9;

$num 对于今天的条目来说是 1,对于昨天的条目来说是 2。因此基本上今天创建的条目会在昨天的查询结果中重复。

最佳答案

您正在从数据库中获取您请求的结果。即大于今天减去您输入的天数的任何记录。

当您尝试 @KenWhite 建议将 > 更改为 = 时,您得到 0 条记录的原因是因为您的字段是 DATETIME,因此从 NOW 中减去 24 小时( )产生昨天相同的确切时间,并且您可能没有在昨天这个时间精确写入的记录。对吗?

您需要做的是测试两个日期之间的记录以获得您想要的结果。切换到 CURDATE(),而不是 NOW(),这样您就可以放心获得您正在查找的日期时间范围内的每条记录。

SELECT *
FROM tab
WHERE 
  created BETWEEN DATE_SUB(CURDATE(), INTERVAL $num DAY) AND DATE_SUB(CURDATE(), INTERVAL $num - 1 DAY) 
ORDER BY created DESC LIMIT 9;

您可以在此处查看 SQLFiddle:http://sqlfiddle.com/#!2/19d9b/12

关于mysql - 日期间隔错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594226/

相关文章:

php - 模拟保存 propel 对象(不写入表)

php - 表单不将数据保存到 MySQL 数据库

java - 第一次连接org.hibernate.exception.JDBCConnectionException : Unable to acquire JDBC Connection

php - 使用表锁防止并行执行 (MySQL)

mysql - 获取 varchar 字段的最大记录

php - 我如何在这个脚本中调用它?

mysql - 用触发器求和两列

php - 如何根据第一个条件结果对 Laravel 查询构建器进行排序

java - Spring boot jar docker 部署抛出与 MySQL 容器的连接异常

mysql - 如何在选项卡中传递方法(Ionic 2)