| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > Помогите с довольно простой ХП |
| Автор: scorp 15.12.2002, 10:49 |
| Ниже процедура, которая отбирает людей старше 60 лет и ещё не уволенных. все поля дат у меня имеют тип Timestamp SET TERM ^; CREATE PROCEDURE old_drivers AS Declare variable driverID integer; Declare variable DateTime Date; BEGIN DateTime = cast('now' as Date); For Select ID From tbDrivers where (:DateTime - tbDrivers.birthday)>60 and tbDrivers.date_dismissal is null Into :driverID do begin Update tbDrivers set tbDrivers.date_dismissal=:DateTime where tbDrivers.ID=:driverID; suspend; end END^ SET TERM ;^ |
| Автор: Vit 15.12.2002, 14:04 |
| 1) Нет вопроса 2) Нет указания на то что именно не работает 3) Нет указания на то какая это база данных, так как даты в разных базах организованы немного по разному. |
| Автор: Medved 15.12.2002, 17:00 |
| Процедура скорее всего на Interbase.... но что-то и мне не совсем понятно, в чем у тебя проблема.... |
| Автор: podval 15.12.2002, 18:21 | ||
Предполагаю, что строка
|
| Автор: Medved 15.12.2002, 18:50 | ||
Это еще ни о чем не говорит..... |
| Автор: scorp 18.12.2002, 03:59 |
| Сорри, если не корректно задал вопрос. Это хранимая процедура под InterBase. весь вопрос состоит в том, что не работает выражение, выделенное жирным шрифтом. Это выражение слегка изменилось в моей последней редакции: where (:DateTime - cast (tbDrivers.birthday as Date))>60 and tbDrivers.date_dismissal is null Я не получаю целого числа перед сравнением с чимслом 60. все поля с датами в базе имеют тип TimeStamp. Процедура отбирает всех сотрудников старше 60 лет и ещё не уволенных и отправляет их на пенсию. Как его переделать? |
| Автор: scorp 18.12.2002, 04:18 |
| Всё народ сделал. надо было так: where ((cast (tbDrivers.birthday as date) + 21915)< :DateTime) and (tbDrivers.date_dismissal is null) где 21915 - кол-во дней за 60 лет с учётом вытокостных лет, с погрешностью в один, два дня. а до этого я прибавлял всего 60 дней. Кто помогал, тому сенкс |
| Автор: Medved 18.12.2002, 04:44 |
| вообще-то тебе никто и не помогал если честно....
|
| Автор: digital_pilot 19.12.2002, 09:01 |
| что, неужели в interbase нету ниче вроде DATEDIFF в mssql? просветите, чисто для общего развития :) |
| Автор: AntonSaburov 19.12.2002, 21:19 | ||
Модератор: Желательно задавать этот вопрос в отдельной теме |
| Автор: Vit 20.12.2002, 00:48 | ||||
Это как раз вопрос по теме, тут действительно - если есть функция сравнения дат то решение нужно делать через неё, так как предложенное решение мягко выражаясь очень приблизительное. |