我面临着奇怪的 mysql 行为...
如果我想从“MyTable”返回日期低于 10 秒前或 future 日期的行 我还存储 future 的日期,因为在我的实际程序中,我“启动”了一些延迟查询,而日期实际上是最后一个查询日期......即:一种队列......:
SELECT (NOW() - date) AS new_delay, id
FROM MyTable
WHERE (NOW() - date < 10)
ORDER BY new_delay DESC;
这个没有按预期工作:它返回所有条目:
编辑:这是结果:
但是,这个运行得很好:
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/