Я пытаюсь рассчитать количество дней между текущей датой и датой в таблице.Дата не более нескольких месяцев в прошлом или будущем.Однако, пытаясь вычислить эту дельту с помощью 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
Это вызывает исключение (например, '21474836484' в столбце 39 находится вне допустимого диапазона для типа данных INTEGER) в нашем DAO при попытке поместить dateDelta винт полепри отладке мы видим такие значения для приведенных выше столбцов:
todayToDays:737546
fieldAsDate:3/1/19 12:00 AM
fieldAsToDays:**-2.66287234868E11**
dateDelta:**4294967478**
Последние два поля явно неверны.Что особенно странно, так это то, что ошибка возникает не при каждом запросе.Kludge будет создать как объект даты Java, используя значение fieldAsDate и сделать математику в Java.но это должно быть осуществимо непосредственно в среде SQL
: MySQL 5.7.25 (Ubuntu 16.04) Tomcat 8.5.33 Java 1.8.0_181 Библиотека пула JDBC: HikariCP 3.3.1