Никто не упомянул, что функция log () определена только для строго положительных аргументов. Следите за этим при использовании вычитаний внутри log ().
Что касается исходного вопроса, ключевым фактором для разрешения было сообщить нам тип данных для столбца даты. Если он не подписан, MySQL может не понравиться.
Правило состоит в том, что MySQL имеет плохой арифметический алгоритм и не может понять, как вычесть операнд B из другого A (= сделать AB), когда A закодирован на меньшее количество байтов, чем B AND B> A. *
например. A = 12 и SMALLINT, B = 13 AS INT, тогда MySQL не может понять, что такое A-B (-1!)
Чтобы создать контент MySQL, просто увеличьте длину кода операнда A. Как? Использование CAST () или умножение A на десятичное число.
Как видно, проблема переполнения меньше, чем проблема обработки знака в арифметике MySQL.
Микропроцессор, а точнее, человек, не имеет проблем с выполнением такого рода арифметики ...
Использование CAST () является способом, или для краткости, просто провоцирует неявное приведение, умножая операнд A на 1. (или 1.0) :
1019 * например *
1.*A - B