这是我的查询:
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年9月6日,距离2013年8月15日还不到91天。从2013年8月29日至今,还不到77天。但从2013-09-01到现在已经5天了,从2013-09-06到现在已经0天了。所以后半部分的结果是正确的,但前半部分......我什至不知道它从哪里得到这些数字。
知道这个查询出了什么问题吗?
谢谢!
最佳答案
您的问题是您尝试通过减法 -
运算符对日期进行操作,就像使用普通操作数一样。 MySQL 不会处理这个问题。您应该使用 DATEDIFF()功能:
DATEDIFF(CURDATE(), date_flag) AS days_overdue
获得所需的结果(默认以天为单位)
关于mysql - 简单的 curdate() 减法运算返回不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18658773/