Форум: "Базы";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Внизпреобразования типов в 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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.01 c