Главная страница
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 минут ??? Откуда это ?
Из Дельфи ? А причем тут он (или оно?) ?



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

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

Наверх




Память: 0.56 MB
Время: 0.017 c
3-8325
kukuikar
2003-10-12 16:30
2003.11.03
Я чайник в програмировании БД. Помогите.


14-8673
Zergling
2003-10-12 10:03
2003.11.03
Заправка катриджа для HP 840С - черный


3-8318
gs
2003-10-13 01:56
2003.11.03
Подскажите кто-нибудь как подключиться ч-з BDE к DBF


14-8596
smike
2003-10-13 16:04
2003.11.03
InstallShield Express


1-8513
Виталя
2003-10-23 18:46
2003.11.03
Что возвращает StrToDateDef(Str:string,DefDate:TDate) ?