mysql - 简单的 curdate() 减法运算返回不一致的结果

标签 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年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/

相关文章:

mysql - 在不使用存储过程的情况下循环 n 次

sql - 如何使用 Prisma JS 检查文本列是否为空

php - 关系型数据库 MYSQL/PHP

Sql Query - 限制查询结果

MySQL 外键错误 1005 errno 150 主键作为外键

php - 无法将 LIKE 与 GROUP BY 一起使用

mysql - 将行转换为列 - 一张表

MySQL - 如果在另一个表上匹配,则排除一个表中的所有行

mysql - Sql 连接查询 - 如果不在连接查询中则设置默认值

Select 查询中的 MySQL Concat/Trim 以检查另一个表中是否存在 - 我的代码有什么问题?