Просто перенесите некоторый код из OracleDB в MariaDB и конвертируйте некоторые выражения OracleDB (например, SYSDATE - ? / 1440
) в нотацию MariaDB (это, кажется, подходит: NOW() - interval 60 * ? second
).
Наткнулся на то, что я подозреваю быть известной ошибкой или документированным поведением (пожалуйста, помогите) при отладке следующего некорректно работающего выражения (в основном сравнивая продолжительность двух исторических «блокировок»)
WHERE (a.expirationDt - a.acquisitionDt) > (b.expirationDt - b.acquisitionDt)
В OracleDB - это выражение работало согласованно / надежно. В MariaDB - это зависит от того, принадлежат ли вычтенные временные метки одной и той же минуте (тогда вычитание дает правильное количество секунд), или если они получены из двух разных минут (тогда результаты вычитания выглядят дополненными / округленными до ближайшей минуты ), что дает нелогичный результат.
Вот небольшая демонстрация (в основном с использованием now()
и "20 se c a go"):
root@localhost> maria "select now(), now() - interval 60 * 1/3 second, now() - interval 60000000 * 1/3 microsecond, now() - (now() - interval 60 * 1/3 second), now() - (now() - interval 60000000 * 1/3 microsecond), TIMESTAMPDIFF( second, now() - interval 60 * 1/3 second, now()) from dual"
2020-02-03 13:51:59.0
2020-02-03 13:51:39.0
2020-02-03 13:51:39.0
20.0000
20.000000
20
root@localhost> maria "select now(), now() - interval 60 * 1/3 second, now() - interval 60000000 * 1/3 microsecond, now() - (now() - interval 60 * 1/3 second), now() - (now() - interval 60000000 * 1/3 microsecond), TIMESTAMPDIFF( second, now() - interval 60 * 1/3 second, now()) from dual"
2020-02-03 13:52:02.0
2020-02-03 13:51:42.0
2020-02-03 13:51:42.0
60.0000
60.000000
20
Я знаю что TIMESTAMPDIFF
выглядит нормально и может переписать SQL соответственно (просто нужно убедиться, как правильно работать с точностью до секунды, учитывая, что "20,4 se c> 20,2 se c" вернет false
один раз округляется до 1-с * c точности).
Мой главный вопрос - что-то не так в моей настройке MariaDB? Или это известная ошибка в определенных версиях MariaDB? Или это по замыслу?