我正在尝试构建一个查询,该查询将比较 2 个字段(start_time 和 end_date)从和到特定日期加载记录。
SELECT start_time
,end_time
,DATEDIFF(end_time, start_time) AS DiffDate
FROM my_tbl
WHERE start_time >= '2015-04-27 00:00:00'
AND end_time <= '2015-04-28 00:00:00'
AND end_time >= '2015-04-27 00:00:00'
AND DiffDate < 100
LIMIT 1000;
不幸的是,DiffDate 总是返回 0。 理想的情况是在插入 end_time 时计算 start_time 和 end_time 之间的差异,但我无法对数据库进行任何更改。 我在这里做错了什么?即使 DiffDate 正常工作,它也会被视为一个好的解决方案吗?
最佳答案
从 where 子句中的条件看来,您正在尝试获取同一日期的数据,但是在同一天使用 datediff
总是会得到 0
mysql> select datediff('2015-04-27 12:00:00','2015-04-27 00:00:00') as diff ;
+------+
| diff |
+------+
| 0 |
+------+
1 row in set (0.03 sec)
您可能需要其他计算方式,例如使用 timestampdiff
mysql> select timestampdiff(minute ,'2015-04-27 00:00:00','2015-04-27 12:00:00') as diff ;
+------+
| diff |
+------+
| 720 |
+------+
1 row in set (0.00 sec)
此外,您在不允许的 where 子句中使用别名,您必须将其更改为 having 子句
SELECT start_time
,end_time
,timestampdiff(minute,start_time,end_time) AS DiffDate
FROM my_tbl
WHERE start_time >= '2015-04-27 00:00:00'
AND end_time <= '2015-04-28 00:00:00'
AND end_time >= '2015-04-27 00:00:00'
having DiffDate < 100
LIMIT 1000;
关于带有 DATEDIFF 的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29937400/