![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Арифметические операции с датами в Interbase [D5, IB5.x]
Sergei Ivanov © (2002-10-31 14:21:00)Столкнулся с граблями.
Программа использует компонент IBQuery (Delphi 5) для получения данных из БД (InterBase 5). Запрос выглядит сведущим образом (параметр DateStat = 30.08.2002 (тип Date))
Select сount(StaffId) from Staff
where (s.EndDate - :DateStat) > 180
Возвращается ошибка: SQL error code = -303
conversion error from string "30-AUG-2002"
При этом запросы следующего вида отрабатывают нормально.
Select сount(StaffId) from Staff
where s.EndDate = :DateStat
Select сount(StaffId) from Staff
where (s.EndDate - "30-AUG-2002")> 180
Так же пробовал задавать параметр DateStat = "30-AUG-2002" (тип String) происходит тоже самое, т.е возвращается ошибка -303.
При использование CAST происходит следующее:
Select сount(StaffId) from Staff
where (s.EndDate - Cast( :DateStatAs Date)) > 180
Возвращается ошибка:SQL error code = -804
Data type unknown
Не зависимо от того, как я задаю параметр String-ом или Date.
Может, кто сталкивался с такой проблемой. Дело в том, что без параметра DateStat обойтись нельзя.
Sergei Ivanov (2002-10-31 15:53:00) [1]> Johnmen
Спасибо!
Johnmen (2002-10-31 15:46:00) [2]Тогда все просто :
where (s.EndDate - 180)>:DateStat
Johnmen (2002-10-31 15:39:00) [3]>Sergei Ivanov
Да, виноват... Действительно возвращает...:)
Johnmen (2002-10-31 15:26:00) [4]>Sergei Ivanov (31.10.02 15:11)
>Для справки: (
Откуда взята такая интересная справка ?
Wolf226 (2002-10-31 15:26:00) [5]Да не в дате тут дело!
Просто непозволяется с параметрами арифметические операции производить.
По пробуй тоже с вещественными числами - та же ошибка.
Генерируй SQL вручную, без параметров.
IBQuery1.sql.text:="select s.enddate-"+DateToStr(... и.т.д
Sergei Ivanov (2002-10-31 15:11:00) [6]Да прошу прощения за опечтку
Select сount(StaffId) from Staff S
where (s.EndDate - :DateStat) > 180
sэто алиас для таблицы Staff, а s.endDate - это поле типа дата из таблицы Staff
Для справки: (s.EndDate - "30-AUG-2002") данное выражение возвращает количество дней между двумя датами.
Johnmen (2002-10-31 14:32:00) [7]Интересно, а что будет результатом выражения
"Sergei Ivanov"-"Ivanov" ? (Это намек...:))
И что тобою ожидается от s.EndDate - :DateStat ?
Alexandr (2002-10-31 14:25:00) [8]сдается, мне запрос у тебя неправдоподобный...
откуда s.endDate? таблицы такой у тебя в запросе нету.
Что - то вы скрываете, сударь.