My Sql Query. Неверное значение при вычитании двух значений даты [дубликаты]

0
SELECT (CURRENT_DATE - P.DataDiPrestito) AS "Sisssssss"
FROM prestito P, utente U
WHERE P.id_Utente = U.ID_Utente

Поэтому я вычитаю по текущей дате значение даты из моей базы данных, чтобы увидеть разницу между ними в днях.

Проблема в том, что, когда я вычитаю значение, которое в том же месяце результат будет правильным, но когда он будет за месяц до этого.

Сегодня 15 мая, и если отступ от него того же значения даты я получаю 0, если вычесть из него значение даты за день до того, как я получу 1 и т.д. И так далее.

Но когда я отвлекаюсь от значения с апреля, я получаю правильное значение плюс 70. Например, если я это делаю (15 мая - 30 апреля), мне должно быть 15, но вместо этого я получаю 85 и так далее, и если попробую чтобы использовать март или февраль, я получаю еще более высокие значения, если попытаюсь (15 мая - 6 февраля) получить 309.

Что я могу сделать?

  • 0
    В качестве объяснения поведения, которое вы видите, оператор вычитания - (знак минус) работает с числовыми значениями. MySQL выполняет неявное преобразование значения DATE в числовое значение и выполняет числовое вычитание 20180515 - 20180430 . Когда вычитание сделано, это просто вычитание чисел, концепция, что исходные значения, представленные как «даты», теряется. Я рекомендую использовать функцию TIMESTAMPDIFF с ключевым словом DAY в качестве первого аргумента. dev.mysql.com/doc/refman/5.7/en/...
Теги:

2 ответа

0
Лучший ответ

Вы должны проверить DATEDIFF(). Это сделает то, что вы хотите, давая разницу в день между двумя датами.

DATEDIFF (выражение1, выражение2)

1

Вычитание дат друг от друга не работает, как вы думаете.

Если вы вычтите 30 апреля с 15 мая, это то, что рассчитывается внутренне:

20180515 - 20180430 = 85

Цифры просто обрабатываются как десятичные числа.

Функция, которую вы ищете, называется DATEDIFF().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню