mysql - where 子句中的 SQL 日期比较未按预期工作

标签 mysql date datetime date-comparison

我面临着奇怪的 mysql 行为...

如果我想从“MyTable”返回日期低于 1​​0 秒前或 future 日期的行 我还存储 future 的日期,因为在我的实际程序中,我“启动”了一些延迟查询,而日期实际上是最后一个查询日期......即:一种队列......:

SELECT (NOW() - date) AS new_delay, id 
FROM MyTable 
WHERE (NOW() - date < 10) 
ORDER BY new_delay DESC;

这个没有按预期工作:它返回所有条目:

编辑:这是结果:

enter image description here

但是,这个运行得很好:

SELECT (NOW() - date) AS new_delay, id 
FROM MyTable 
WHERE (NOW() < date + 10) 
ORDER BY new_delay DESC;
<小时/>

数据库示例:

CREATE TABLE IF NOT EXISTS `MyTable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


INSERT INTO `MyTable` (`id`, `date`) VALUES
(1, (NOW())),
(2, (NOW()-10)),
(3, (NOW()+100));
<小时/>

有什么想法吗?

最佳答案

不要进行这样的比较。在数字上下文中 now() 最终会被转换为一个整数——并且是一种神秘的格式。相反,请使用 DATEDIFF() 或仅进行常规比较。例如,如果您想要天数差异:

SELECT datediff(curdate(), date) as new_delay, id
FROM MyTable
WHERE date >= date_sub(now(), interval 10 day) 
ORDER BY new_delay DESC;

关于mysql - where 子句中的 SQL 日期比较未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280871/

相关文章:

python - 对python中的元组列表进行排序

date - 如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?

php - 为什么 PHP 日期的迭代数周会出错?

c# - 如何使用 C# 从时间格式大于 24 小时的字符串中获取总秒数

mysql - 'created' 的默认值无效,但对 DATETIME 使用 CURRENT_TIMESTAMP

date - 比较 XSLT 中的值时,< 和 lt 有什么区别?

python - 从数据框中随机选择小时

mysql - asp.net从mysql填充gridview的问题

mysql 错误 :ERROR hbm2ddl. SchemaUpdate - 将 Grails 应用程序推送到 Cloud Foundry 时行大小太大

mysql - 如何从 mysql 查询中的其他四个不同字段中搜索最小值?