Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с довольно простой ХП, дело в арифметических операциях над дата 
:(
    Опции темы
scorp
  Дата 15.12.2002, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.12.2002

Репутация: нет
Всего: нет



Ниже процедура, которая отбирает людей старше 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 ;^
PM MAIL   Вверх
Vit
Дата 15.12.2002, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



1) Нет вопроса
2) Нет указания на то что именно не работает
3) Нет указания на то какая это база данных, так как даты в разных базах организованы немного по разному.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Medved
Дата 15.12.2002, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Процедура скорее всего на Interbase.... но что-то и мне не совсем понятно, в чем у тебя проблема....


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
podval
Дата 15.12.2002, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: нет
Всего: 62



Предполагаю, что строка
Цитата
where (:DateTime - tbDrivers.birthday)>60
выделена жирным шрифтом неспроста :)


PM WWW ICQ   Вверх
Medved
Дата 15.12.2002, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Цитата

выделена жирным шрифтом неспроста  


Это еще ни о чем не говорит.....




--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
scorp
Дата 18.12.2002, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.12.2002

Репутация: нет
Всего: нет



Сорри, если не корректно задал вопрос.
Это хранимая процедура под InterBase. весь вопрос состоит в том, что не работает выражение, выделенное жирным шрифтом.
 Это выражение слегка изменилось в моей последней редакции:

where (:DateTime - cast (tbDrivers.birthday as Date))>60 and tbDrivers.date_dismissal is null

Я не получаю целого числа перед сравнением с чимслом 60.

все поля с датами в базе имеют тип TimeStamp. Процедура отбирает всех сотрудников старше 60 лет и ещё не уволенных и отправляет их на пенсию.
Как его переделать?
PM MAIL   Вверх
scorp
  Дата 18.12.2002, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.12.2002

Репутация: нет
Всего: нет



Всё народ сделал.
надо было так:
where ((cast (tbDrivers.birthday as date) + 21915)< :DateTime) and (tbDrivers.date_dismissal is null)

где 21915 - кол-во дней за 60 лет с учётом вытокостных лет, с погрешностью в один, два дня.

а до этого я прибавлял всего 60 дней.

Кто помогал, тому сенкс
PM MAIL   Вверх
Medved
Дата 18.12.2002, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



вообще-то тебе никто и не помогал если честно....




--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
digital_pilot
Дата 19.12.2002, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.6.2002

Репутация: нет
Всего: нет



что, неужели в interbase нету ниче вроде DATEDIFF в mssql? просветите, чисто для общего развития :)
PM MAIL   Вверх
AntonSaburov
Дата 19.12.2002, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(digital_pilot @ 19.12.2002, 01:01)
что, неужели в interbase нету ниче вроде DATEDIFF в mssql? просветите, чисто для общего развития :)

Модератор: Желательно задавать этот вопрос в отдельной теме
PM MAIL WWW ICQ   Вверх
Vit
Дата 20.12.2002, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Цитата(AntonSaburov @ 19.12.2002, 04:19)
Цитата(digital_pilot @ 19.12.2002, )
что, неужели в interbase нету ниче вроде DATEDIFF в mssql? просветите, чисто для общего развития :)

Модератор: Желательно задавать этот вопрос в отдельной теме

Это как раз вопрос по теме, тут действительно - если есть функция сравнения дат то решение нужно делать через неё, так как предложенное решение мягко выражаясь очень приблизительное.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.