这是我的疑问:
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天。所以结果的后半部分是正确的,但前者......我甚至不知道从哪里得到这些数字。
任何想法这个查询出了什么问题?
谢谢!
答案 0 :(得分:4)
您的问题是您尝试通过减法-
运算符操作日期和普通操作数一样。 MySQL不会处理它。您应该使用DATEDIFF()功能:
DATEDIFF(CURDATE(), date_flag) AS days_overdue
获得所需结果(默认为天)