Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.03;
Скачать: CL | DM;

Вниз

преобразования типов в firebird   Найти похожие ветки 

 
stud ©   (2003-10-13 11:15) [0]

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


 
Sergey13 ©   (2003-10-13 11:26) [1]

2stud © (13.10.03 11:15)
А что ты хочешь получить от складывания времени? Может не время надо складывать, а что то другое?


 
Alexandr ©   (2003-10-13 11:27) [2]

таки, а чтож ты хочешь получить при сложении времени?
сколько будет 21.01.1984+04.10.2002?

складывать можно только интервалы. Которые предствалять чилом минут, секунд дней и пр... а это уже integer.


 
stud ©   (2003-10-13 11:35) [3]


> Alexandr © (13.10.03 11:27) [2]

не может быть!!!!
а что я спрашиваю, нужно сложить время как numeric, затем преобразовать его в "нормальное" время и записать в таблицу. судя по справке при ведение типов ко времени или дате возможно для numeric, но такая конструкция
f_TIME=:F_TIME+:TIMESLOT; все три переменные типа numeric
temp_time(время)=cast(CAST(f_TIME AS timestamp) as time); выдает черте что,
Overflow occurred during data type conversion.
conversion error from string "0.375208333333333".
т.е. f_time=0.375, timeslot=0.0208333333333 и как с этим бороться


 
Жук ©   (2003-10-13 11:56) [4]


> stud ©

А что должно получится, если к 1 июня 2003 года прибавить 5 октября 1980 ?


 
Johnmen ©   (2003-10-13 12:03) [5]

>stud ©

С справке ошибка. Преобразование из любых численных типов в date и time невозможно.


 
stud ©   (2003-10-13 12:08) [6]


> Johnmen © (13.10.03 12:03) [5]

ясно, что и требовалось ......


 
kaif ©   (2003-10-13 13:33) [7]

2 Johnmen © (13.10.03 12:03) [5]
Я тоже имел такого рода проблемы с преобразованием между чиленными типами и Date (по инерции от Дельфи). Но ведь такая вещь, как mydate = mydate + 5.5 в текстах хранимых процедур работает. Так в чем основное правило работы с датами?


 
MsGuns ©   (2003-10-13 13:35) [8]

SQL -> CAST -> F1


 
Delirium^.Tremens ©   (2003-10-13 13:57) [9]


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


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

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


 
stud ©   (2003-10-13 13:57) [10]


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

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


 
kaif ©   (2003-10-13 14:29) [11]

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 15:01) [12]

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


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

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

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


 
Zhouck ©   (2003-10-13 15:08) [14]

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


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

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


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

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


 
stud ©   (2003-10-13 15:19) [17]

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


 
Delirium^.Tremens ©   (2003-10-13 16:21) [18]

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


 
stud ©   (2003-10-13 16:25) [19]

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


 
Delirium^.Tremens ©   (2003-10-13 16:41) [20]


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


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


 
stud ©   (2003-10-13 16:43) [21]

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


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

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


 
Alexandr ©   (2003-10-14 07:08) [23]

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


 
Sergey13 ©   (2003-10-14 08:57) [24]

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

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


 
Johnmen ©   (2003-10-14 09:45) [25]

Вот его код
http://delphimaster.net/view/3-1065786413/


 
stud ©   (2003-10-14 09:49) [26]


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

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


 
Sergey13 ©   (2003-10-14 10:36) [27]

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

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


 
Johnmen ©   (2003-10-14 10:57) [28]

>Sergey13 © (14.10.03 10:36)

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


 
stud ©   (2003-10-14 11:10) [29]


> Sergey13 © (14.10.03 10:36) [27]

ты не повериш, но что я только не делал! и разбивал и удалял и снова все переписывал а воз и ныне там!


 
Sergey13 ©   (2003-10-14 11:11) [30]

Дык и 1. вроде нельзя. 8-)


 
Sergey13 ©   (2003-10-14 11:17) [31]

2stud © (14.10.03 11:10) [29]
Ты в поля определенного типа (DATE,TIME) пишешь значения другого типа(INTEGER,DOUBLE PRECISION). Это тупик.


 
stud ©   (2003-10-14 11:22) [32]

похоже, хотя дата это число целое... а время дробная часть.... и почему не работает приведение типов - не понятно


 
Sergey13 ©   (2003-10-14 11:30) [33]

То что забор зеленый не значит, что все зеленое - забор. 8-)
Про даты я тебе написал. DATE+INTEGER=DATE - можно обойти.
А про время... А нафига оно тебе. Время уроков одинаково по всему институту (школе). Достаточно ставить номер урока и иметь таблицу времени уроков. Так и правильнее будет с точки зрения нормализации.


 
Johnmen ©   (2003-10-14 11:37) [34]

TIME+INTEGER=TIME, где INTEGER - секунды.


 
stud ©   (2003-10-14 11:39) [35]


> Sergey13 © (14.10.03 11:30) [33]

телепат однако)) а школа тут при чем)))) ты сам про забор написал. это в вашей школе время уроков одинаковое, а в моей разное у каждого )))


 
stud ©   (2003-10-14 11:40) [36]


> Johnmen © (14.10.03 11:37) [34]

так ведь если 3600 сек+0,020833(30 минут)получится 3600,0208333 однко эта дата где-то ого-го)))


 
Sergey13 ©   (2003-10-14 11:44) [37]

2stud © (14.10.03 11:39) [35]
>телепат однако))
Не угадал? А что за расписание тогда? Именно поэтому и сделал вывод. 8-)


 
stud ©   (2003-10-14 11:45) [38]

расписание приема врачами пациентов))


 
Sergey13 ©   (2003-10-14 11:51) [39]

2stud © (14.10.03 11:45) [38]
Ну тады ОЙ! 8-)


 
Johnmen ©   (2003-10-14 11:54) [40]

>stud © (14.10.03 11:40)

С чего ты взял, что 0,020833=30 минут ??? Откуда это ?
Из Дельфи ? А причем тут он (или оно?) ?


 
stud ©   (2003-10-14 12:11) [41]

переводил


 
Johnmen ©   (2003-10-14 12:17) [42]

>stud © (14.10.03 12:11)

??? Что, как, откуда и куда ???


 
stud ©   (2003-10-14 12:51) [43]

в дельфи.
но это не суть. как это может решить проблему?


 
Danilka ©   (2003-10-14 12:58) [44]

[43] stud © (14.10.03 12:51)
Какую проблему?
Если приведения типов, то оно вообще нафиг не нужно.


 
stud ©   (2003-10-14 13:01) [45]

согласен. тогда в чем проблема?


 
Danilka ©   (2003-10-14 13:10) [46]

[45] stud © (14.10.03 13:01)
тогда скажи, плиз, еще раз, в чем твоя проблема?
у меня вот-так катит без проблем:

CREATE TABLE PROBA (
PERA DATE NOT NULL
);
ALTER TABLE PROBA ADD CONSTRAINT FK_PROBA PRIMARY KEY (PERA);

забиваем какие-нибудь даты, затем запрос:

SELECT PERA, PERA+7, PERA+14
FROM PROBA

отрабатывает без проблем.


 
Johnmen ©   (2003-10-14 13:10) [47]

>stud © (14.10.03 13:01)

По-моему, тебе пора сникерснуть...:)))


 
stud ©   (2003-10-14 13:11) [48]


> Johnmen © (14.10.03 13:10) [47]

и не говори уже сам забыл с чего весь сыр-бор))))



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

Текущий архив: 2003.11.03;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.038 c
14-8646
Nickge
2003-10-09 08:33
2003.11.03
система линейных уравнений


1-8520
Переяслов Григорий
2003-10-24 16:44
2003.11.03
---|Ветка была без названия|---


4-8714
Glajik
2003-08-29 04:18
2003.11.03
Виртуальный диск или ...


7-8695
Ванька Сусанин
2003-08-21 16:07
2003.11.03
CD-ROM


3-8330
Evyshka
2003-10-14 09:10
2003.11.03
Повреждение таблицы