Главная 
 Каталог 
 Поддержка 
 Компания 
 Партнеры 
 1C:Франчайзинг 
 Карта сайта 

Задать вопрос
Часто задаваемые вопросы
Справочные материалы
Публикации


Поиск по сайту



Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация


Подписка

Изменение параметров





Hits 88260353
2951
Hosts 3943678
406
Visitors 19003487
536

18


Поддержка / Форумы / Публичные форумы / Программное обеспечение / Запросы в Online Server Pro

  Запросы в 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'







© 2000-2024 Версия-Т