![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
преобразования типов в firebird [D7, IB6.x]
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 года.
А еще эту единицу можно вычесть :-)