Вниз
Скачать: CL | DM;

Арифметические операции с датами в Interbase   Найти похожие ветки 

← →
Sergei Ivanov   (2002-10-31 14:21) [0]

Столкнулся с граблями.

Программа использует компонент 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( :DateStat As Date)) > 180


Возвращается ошибка:SQL error code = -804
Data type unknown

Не зависимо от того, как я задаю параметр String-ом или Date.

Может, кто сталкивался с такой проблемой. Дело в том, что без параметра DateStat обойтись нельзя.


← →
Alexandr ©   (2002-10-31 14:25) [1]

сдается, мне запрос у тебя неправдоподобный...
откуда s.endDate? таблицы такой у тебя в запросе нету.

Что - то вы скрываете, сударь.


← →
Johnmen ©   (2002-10-31 14:32) [2]

Интересно, а что будет результатом выражения
"Sergei Ivanov"-"Ivanov" ? (Это намек...:))
И что тобою ожидается от s.EndDate - :DateStat ?



← →
Sergei Ivanov   (2002-10-31 15:11) [3]

Да прошу прощения за опечтку

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 15:26) [4]

>Sergei Ivanov (31.10.02 15:11)
>Для справки: (

Откуда взята такая интересная справка ?


← →
Wolf226 ©   (2002-10-31 15:26) [5]

Да не в дате тут дело!
Просто непозволяется с параметрами арифметические операции производить.
По пробуй тоже с вещественными числами - та же ошибка.

Генерируй SQL вручную, без параметров.

IBQuery1.sql.text:="select s.enddate-"+DateToStr( ... и.т.д


← →
Johnmen ©   (2002-10-31 15:39) [6]

>Sergei Ivanov

Да, виноват... Действительно возвращает...:)


← →
Johnmen ©   (2002-10-31 15:46) [7]

Тогда все просто :
where (s.EndDate - 180)>:DateStat



← →
Sergei Ivanov   (2002-10-31 15:53) [8]

> Johnmen
Спасибо!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
3-69213
kva
2002-11-01 14:22
2002.11.21
ADOConnection Delphi 5. Проблемы с ConnectionTimeout


3-69139
Gaber
2002-10-30 16:53
2002.11.21
Запрос SQL на изменение значения поля


3-69110
ZaaZ
2002-11-04 00:31
2002.11.21
База из двух файлов 1.db и 1.mb


3-69152
OlegKrt
2002-10-31 08:28
2002.11.21
Обработка ошибки при работе с Table


4-69631
Saninsky
2002-10-10 19:45
2002.11.21
Запуск DOS приложений из Delphi




   Наверх