MySQL DATEDIFF和TO_DAYS返回非常大且不正确的值

时间:2019-05-02 13:51:53

标签: java mysql sql jdbc

我正在尝试计算当前日期与表格中的日期之间的天数。日期最多只能是过去或将来的几个月。但是,当尝试使用datediff或to_days计算此增量时,即使在验证表中的日期位于当前日期的90天内之后,有时也会看到非常不正确的值。

请考虑以下代码段,其中s.enroll_begin是DATE字段

SELECT 
... /*35 other columns */
to_days(curdate()) as todayToDays,
s.enroll_begin as fieldAsDate,
to_days(s.enroll_begin) as fieldAsToDays,
DATEDIFF(s.enroll_begin,curdate()) as dateDelta

当试图将dateDelta放入int字段时,这会在我们的DAO中引发异常(例如,“ 39”列中的“ 21474836484”超出了数据类型INTEGER的有效范围)。调试时,我们会在上面的列中看到类似的值:

todayToDays:737546
fieldAsDate:3/1/19 12:00 AM 
fieldAsToDays:**-2.66287234868E11**
dateDelta:**4294967478**

最后两个字段显然是错误的。尤其奇怪的是,并不是每个查询都发生错误。一个麻烦的办法是使用fieldAsDate值将其创建为java日期对象,并在java中进行数学运算。但这应该可以直接在SQL中完成

环境: MySQL 5.7.25(Ubuntu 16.04) 的Tomcat 8.5.33 Java 1.8.0_181 JDBC池库:HikariCP 3.3.1

0 个答案:

没有答案