Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
6-8575
Поляков Владимир Викторович
2003-09-09 12:22
2003.11.03
Voice & UDP


14-8634
Mystic
2003-10-07 13:54
2003.11.03
Интересная партия


1-8540
OlegM
2003-10-23 13:02
2003.11.03
Как в StringGride сделать чтобы текст в ячейке был двухстрочный


3-8283
rosl
2003-10-09 02:32
2003.11.03
sql


1-8533
Igit
2003-10-23 13:24
2003.11.03
case ... of





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский