Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

преобразования типов в firebird [D7, IB6.x]


Страницы:   1 2 3

stud ©   (2003-10-13 11:15:00) 

как можно осуществить такую операцию? сложить две переменные типа время или дата если написать просто time=time1+time2;
то получим expression evaluation not supported. как выйти из этой положений. приведение типов возможно только из/в numeric


Johnmen   (2003-10-14 10:57:00) [21]

>Sergey13 © (14.10.03 10:36)

2. Нельзя... Вдокунелезь - она врет...:)


Sergey13   (2003-10-14 10:36:00) [22]

Честно говоря не все понял.
1. Ты вставляешь в поле DATE значение INTEGER. Зачем? Ведь DATE+INTEGER=DATE, значит дату в целое можно и не приводить, а оперировать сразу датами.
2. В TIME ты вставляешь DOUBLE PRECISION. А так можно (я не работал с этим типом, а вдоку лень лезть 8-)?

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


stud   (2003-10-14 09:49:00) [23]


> Sergey13 © (14.10.03 08:57) [24]

а какая в принципе разница где это делать? просто хочу реализовать нужные мне действия в хранимой процедуре


Johnmen   (2003-10-14 09:45:00) [24]

Вот его код
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1065786413&n=1


Sergey13   (2003-10-14 08:57:00) [25]

2stud © (13.10.03 16:25) [19]
Гляди ка, после 20+ постов задача начала проясняться. 8-)

>ага, только зачем сервер ругается что подобные присваивания не поддерживаются??? с этого-то и начались все эти преобразования
А зачем это делать на сервере? Количество понедельников на сервере и клиенте в принципе должно совпадать. 8-)
Опиши задачу поподробнее, как что где делал и что получал в ответ.


Alexandr   (2003-10-14 07:08:00) [26]

в натуре, текст запроса давай.


kaif   (2003-10-13 20:00:00) [27]

Я сталкивался с подобной проблемой. В некоторых SQL-Запросах (некоторых видах UPDATE и INSERT) вычисления не поддерживаются вообще, не только вычисления дат. Точно не помню, какие запросы, но я с этим сталкивался даже на Yaffil.
Например, возможно, что
INSERT INTO ... SELECT AAA + 1 FROM ... может не сработать, может я и ошибаюсь конкретно с этим примером, но такие вещи точно происходят.
Приведи дословно весь текст своего запроса!


stud   (2003-10-13 16:43:00) [28]

все может быть))) наверное клиент виноват))


Delirium^.Tremens   (2003-10-13 16:41:00) [29]


> stud © (13.10.03 16:25) [19]
> ага, только зачем сервер ругается что подобные присваивания
> не поддерживаются??? с этого-то и начались все эти преобразования


Не знаю, зачем он на тебя ругается. Я так делал, делаю и буду делать. Видимо дело не в сервере :-)


stud   (2003-10-13 16:25:00) [30]

ага, только зачем сервер ругается что подобные присваивания не поддерживаются??? с этого-то и начались все эти преобразования


Delirium^.Tremens   (2003-10-13 16:21:00) [31]

К переменной типа "дата" добавляй integer 7 и сравнивай полученное со своей "нужной" датой. Ничего не надо преобразовывать.


stud   (2003-10-13 15:19:00) [32]

наверно смысл этой проблемы не всем понятем:
мне нужно от пределенной даты до какой-то записать в БД например все понедельники, т.е. получаем первый понедельник в интересующем интервале и далее прибавляем к дате 7 и т.д. пока не дойдем до нужной даты. но как описано выше тут что-то не так))


stud   (2003-10-13 15:16:00) [33]

так если можно вычесть - на кой их преобразовывать тогда!?
на запись вида:
data1=data2+7;
где data - это даты)) выдается ошибка!


Anatoly Podgoretsky   (2003-10-13 15:15:00) [34]

Дни к дня и т.д. можно (поскольку интервалы), время ко времени (дату к дате), хоть и можно, но смысла не имеет


Zhouck   (2003-10-13 15:08:00) [35]

Интересно, а зачем добавлять две даты? Что из это можно получить?
01,01,2002+01,01,2002=02,02,4004, что ли? Вообще можно добавлять или дни к дням или секунды к секундам.


Johnmen   (2003-10-13 15:05:00) [36]

>kaif © (13.10.03 13:33)
>Delirium^.Tremens © (13.10.03 13:57)

Да, прибавлять/вычитать к/из дат и времен численные значения можно. И все корректно. А вот преобразовать - нет.
Видимо, так устроен синтаксический анализатор и препроцессор сервера...


stud   (2003-10-13 15:01:00) [37]

а какого он преобразовывает , если все три переменные - одного типа?? преобразование происходит после сложения! и такой результат


kaif   (2003-10-13 14:29:00) [38]

2 stud © (13.10.03 13:57) [10]
Он явно преобразовал в VARCHAR и сложил "две строки", то есть сделал так:

cast(0.375 AS VARCHAR(15))||cast(0.0208333333333 AS VARCHAR(15))


stud   (2003-10-13 13:57:00) [39]


> MsGuns © (13.10.03 13:35) [8]

SQL -> CAST -> F1-> непонятные проблемы.
пример такой
f_time=0.375, timeslot=0.0208333333333
f_time+timeslot=0.375208333333333
вместо 0,3958333333333
это в каком хелпе описано?


Delirium^.Tremens   (2003-10-13 13:57:00) [40]


> Johnmen © (13.10.03 12:03) [5]
> >stud ©
>
> С справке ошибка. Преобразование из любых численных типов
> в date и time невозможно.


Точно, зато к дате можно легко прибавить, например единицу. И тогда 1 июня 2003 года станет 2-м июня 2003 года.

А еще эту единицу можно вычесть :-)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо