有人可以向我解释这个问题吗?
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()
?
答案 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
子句来选择别名。