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


 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.012 c
14-8638
Viks
2003-10-13 19:42
2003.11.03
Palm OS


7-8678
Эл
2003-08-24 19:40
2003.11.03
Получение информации о системе


3-8254
Fakir
2003-10-14 16:57
2003.11.03
Несооброжу с добавлением в БД


1-8475
_Narayan_
2003-10-23 11:34
2003.11.03
Как получить объект зная его дескриптор ?


4-8709
JS
2003-08-30 17:04
2003.11.03
Иконка в System Tray





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский