На главную страницу Версия-Т
VTSoft.ru

Запросы в Online Server Pro


RSS
Запросы в Online Server Pro
 
Вот обнаружилась такая штука....
После обновления OSP с 2.7.78 до 2.7.90 и соответственно Firebird-а с 1.5 до 2.0 запрос с условием по времени чека стал выполняться некорректно...
Вот что это за условие (время произвольное... например 12:00):
CHECKS.CH_TIME > '12:00:00'
некорректность в том, что чеки с временем 12:00:00 тоже попадают в выборку :(
а если поставить CHECKS.CH_TIME = '12:00:00' то выборка вообще пустая, исходя из этого можно сделать вывод, что я где-то ошибаюсь в синтаксисе запроса.
Объясните, пожалуйста, в чём моя ошибка? :(
 
Дело в том, что Firebird сохраняет время с точностью до миллисекунды, таким образом 12:00:00 может оказаться, к примеру, на самом деле 12:00:00.956. Запрос с условием CHECKS.CH_TIME = '12:00:00' в этом случае ничего не вернет, так как '12:00:00.000' неравно '12:00:00.956'. Именно этот момент у Вас в запросе и не учтен, т.е. любое значение из диапазона времен '12:00:00.001' - '12:00:00.999' всегда больше '12:00:00', но ни одно из этих значений не равно '12:00:00'.

Нюансы с миллисекундами следует учитывать при построении запросов.

Например, если необходимо выбрать все записи со временем с 12:00 до 13:00 включительно, то следует использовать следующее условие
Код
WHERE CHECKS.CH_TIME >= '12:00:00'  AND CHECKS.CH_TIME <= '13:00:00.999'

либо
Код
WHERE CHECKS.CH_TIME >= '12:00:00'  AND CHECKS.CH_TIME < '13:00:01'