简单的curdate()减法操作返回不一致的结果

时间:2013-09-06 13:15:52

标签: mysql sql

这是我的疑问:

SELECT cases.case_id, cases.county_id, case_name, county.county_name, date_referral,
date_flag, auto_flag, sessions.date_entry, curdate() - date_flag AS days_overdue
FROM cases
INNER JOIN county ON cases.county_id = county.county_id
LEFT JOIN sessions ON cases.case_id = sessions.case_id
WHERE date_flag <= curdate( )
AND sessions.date_entry IS NULL
AND date_flag IS NOT NULL
AND auto_flag = "0"
AND status_id = "0"
ORDER BY cases.county_id, days_overdue DESC , case_id ASC
LIMIT 0 , 30

以下是一个示例结果集:

13-1206-B   McC v Jac   2013-08-15  91
13-0951-B   Gen v Gen   2013-08-16  90
13-1160-B   Bla v Bur   2013-08-20  86
12-3048-B   Wor v Wor   2013-08-29  77
13-0903-B   Ben v Ben   2013-09-01  5
13-0500-B   Bru v Bru   2013-09-05  1
13-1238-B   Bal v Bal   2013-09-05  1
13-0135-B   TDA v Tan   2013-09-06  0

列是case_id(不相关),case_name(不相关),date_flag,等式“curdate() - date_flag”的结果为days_overdue。

如您所见,结果非常不一致。今天是2013-09-06,自2013-08-15以来已经过了91天。自2013-08-29以来已经过了77天。但自2013-09-01以来已经过了5天,自2013-09-06以来已经过了0天。所以结果的后半部分是正确的,但前者......我甚至不知道从哪里得到这些数字。

任何想法这个查询出了什么问题?

谢谢!

1 个答案:

答案 0 :(得分:4)

您的问题是您尝试通过减法-运算符操作日期和普通操作数一样。 MySQL不会处理它。您应该使用DATEDIFF()功能:

DATEDIFF(CURDATE(), date_flag) AS days_overdue

获得所需结果(默认为天)