MySQL 使用 DATEDIFF 查询
MySQL query with DATEDIFF
我正在尝试构建一个查询,该查询将比较 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 returns 总是 0。
理想的情况是在插入 end_time 时计算 start_time 和 end_time 之间的差异,但我无法对数据库进行任何更改。
我在这里做错了什么?即使 DiffDate 在工作,它会被认为是一个好的解决方案吗?
来自 MS SQL 我使用的是 DATEDIFF 但解决方案是:
SELECT start_time
,end_time
,TIMESTAMPDIFF(SECOND,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'
AND DiffDate < 100
LIMIT 1000;
我想知道是否有更好的解决方案。
Start_time and end_time are datetime column. So use TimeDIFF..
SELECT start_time, end_time, TIMEDIFF(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;
从 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;
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 between '2015-04-27 00:00:00' AND '2015-04-28 00:00:00'
AND
for date diff < 100
LIMIT 1000;
我正在尝试构建一个查询,该查询将比较 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 returns 总是 0。 理想的情况是在插入 end_time 时计算 start_time 和 end_time 之间的差异,但我无法对数据库进行任何更改。 我在这里做错了什么?即使 DiffDate 在工作,它会被认为是一个好的解决方案吗?
来自 MS SQL 我使用的是 DATEDIFF 但解决方案是:
SELECT start_time
,end_time
,TIMESTAMPDIFF(SECOND,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'
AND DiffDate < 100
LIMIT 1000;
我想知道是否有更好的解决方案。
Start_time and end_time are datetime column. So use TimeDIFF..
SELECT start_time, end_time, TIMEDIFF(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;
从 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;
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 between '2015-04-27 00:00:00' AND '2015-04-28 00:00:00'
AND
for date diff < 100
LIMIT 1000;