在mysql中解释这个查询

时间:2017-01-27 15:43:22

标签: mysql datediff

有人可以向我解释这个问题吗?

SELECT OPEN_DATETIME,
  DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch
WHERE DATEDIFF(OPEN_DATETIME,'2016-12-14 23:59:59')>20;

输出

+------------------------+-------+
| OPEN_DATETIME          | Aging |
+------------------------+-------+
| 2017-01-26 16:28:41    |    44 |
| 2017-01-25 16:32:48    |    43 |
| 2017-01-27 02:00:00    |    45 |
+------------------------+-------+

我理解datediff()意味着获取MySQL上两个日期之间的差异天数。但我不明白为什么在此查询中需要两个datediff()

2 个答案:

答案 0 :(得分:2)

我相信这应该没有双差异,只需在别名上使用HAVING。

SELECT OPEN_DATETIME,
DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch
HAVING Aging >20;

答案 1 :(得分:1)

查询的第二部分:

SELECT OPEN_DATETIME, DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch
WHERE DATEDIFF(OPEN_DATETIME,'2016-12-14 23:59:59')>20;

WHERE条款中:

DATEDIFF(OPEN_DATETIME,'2016-12-14 23:59:59')>20;

再次使用DATEDIFF()函数将结果限制在20天以上,因为您无法使用Aging > 20,因为别名仅在查询中定义。

要使用Aging别名,并且只使用DATEDIFF()一次,您可以使用:

SELECT a.* FROM (
SELECT OPEN_DATETIME, DATEDIFF(OPEN_DATETIME, '2016-12-13 23:59:59') AS Aging
FROM batch) a
WHERE a.Aging > 20

修改

或者,正如Eric所说,您可以使用HAVING子句来选择别名。