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

Вниз

операция деления в запросе   Найти похожие ветки 

 
Konrads   (2009-01-30 13:12) [0]

В базе данных имеются поле начала опредёлённого процесса типа TIMESTAMP и поле длительности этого процесса в минутах типа INTEGER

Нужно в запросе вывести время начала процесса и время завершения процесса

Делаю запрос:

SELECT TSTART, TSTART + TDURATION / 1440 AS TFINAL FROM DB

Никаких ошибок не возникает, за исключением того, что значения TSTART и TFINAL совершенно одинаковые, и от TDURATION никак не зависят. Если вместо операции деления к примеру поставить константу 0.000694444 - это результат деления 1 на 1440, то значение TFINAL будет на обну минуту больше чем TSTART
Пробовал и так

.... TSTART + CAST(TDURATION / 1440 AS DOUBLE PRECISION) AS TFINAL FROM DB

результат тот же


 
Johnmen ©   (2009-01-30 13:38) [1]

TSTART + CAST(TDURATION AS DOUBLE PRECISION)  / 1440 AS TFINAL FROM DB


 
Труп Васи Доброго ©   (2009-01-30 14:28) [2]

Поставь FB2.1 и не надо будет ломать мозг. Там это решается элементарно:

SELECT TSTART, DATEADD(MINUTE,TDURATION,TSTART) AS TFINAL FROM DB


 
Кщд   (2009-01-30 14:37) [3]

>Труп Васи Доброго ©   (30.01.09 14:28) [2]
>Поставь FB2.1 и не надо будет ломать мозг.
это не излом мозга и то, что приведено в Johnmen ©   (30.01.09 13:38) [1] - стандартный ход для FB.

а советовать менять ODS (они у 2.0 и 2.1, как Вы знаете, разные), особенно если база продуктивная, услуга медвежья, на мой взгляд

впрочем, тогда уж сразу ставить oracle - запрос автора переделывать не придется


 
Johnmen ©   (2009-01-30 14:52) [4]

Если правильно подходить к решению вопроса, то достаточно освоить базовую документацию (раздел про типы и их приведение) по применяемому средству. И тогда не надо будет ломать не только мозг, но и руки и глаза...


 
Anatoly Podgoretsky ©   (2009-01-30 15:44) [5]

> Кщд  (30.01.2009 14:37:03)  [3]

Нафиг Оракл, для преемственности надо db2


 
Konrads   (2009-01-30 20:15) [6]

спасибо, смогу проверить завтра, отпишусь


 
Konrads   (2009-01-30 20:16) [7]

спасибо, смогу проверить завтра, отпишусь


 
Konrads   (2009-02-02 07:34) [8]


> Johnmen ©   (30.01.09 13:38) [1]
> TSTART + CAST(TDURATION AS DOUBLE PRECISION)  / 1440 AS
> TFINAL FROM DB

Да, так действительно работает, спасибо за помощ!

Но просто интересно, получается что тип результата операции задаёт тип первого операнда а не тип самой операции? Ведь второй операнд - константа типа INTEGER


 
Konrads   (2009-02-02 07:51) [9]

Похоже я допёр!
Наверно деление целочисленных значений происходит так же как в паскале оаперция DIV, и естественно что разделив допустим 10 на 1440 получаем ноль, и приведение его к типу DOUBLE PRECISION конечно же ни к чему не приведёт.


 
Кщд   (2009-02-02 09:23) [10]

>Konrads   (02.02.09 07:51) [9]
SELECT TSTART, TSTART + TDURATION*1.0/ 1440*1.0 AS TFINAL FROM DB


 
Кщд   (2009-02-02 09:24) [11]

>Кщд   (02.02.09 09:23) [10]
пропустил скобочки)
SELECT TSTART, TSTART + TDURATION*1.0/ (1440*1.0) AS TFINAL FROM DB


 
Johnmen ©   (2009-02-02 09:37) [12]


> Konrads   (02.02.09 07:51) [9]

Тип результата зависит от типов операндов и будет определен, как наиболее "подробный". В данном случае, если операнды integer, то и результат тоже integer.
Именно поэтому пример, приведенный Кщд  (02.02.09 09:24) [11], неверен. Т.к. результат будет приводится к numeric(9,1), а это целое по сути.
Так же неверно, например, 1440.000, ибо точности numeric(9,3) не хватит для "ощущения" минуты...


 
Кщд   (2009-02-02 09:41) [13]

>Johnmen ©   (02.02.09 09:37) [12]
показал пример, как из целого делать число с плавающей
а так, конечно, Вы правы)


 
Konrads   (2009-02-02 10:03) [14]

всё понятно :)


 
Johnmen ©   (2009-02-02 10:05) [15]


> Кщд   (02.02.09 09:41) [13]
> показал пример, как из целого делать число с плавающей

Да, но есть же стандартный CAST.



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

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

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1258023746
stas
2009-11-12 14:02
2010.01.17
Альтернатива TWebBrowser


2-1259253418
Molchanov
2009-11-26 19:36
2010.01.17
WndProc vs WindowProc


2-1259327276
Konstantin
2009-11-27 16:07
2010.01.17
очистить xml файл


15-1258463255
И. Павел
2009-11-17 16:07
2010.01.17
Java Script: Вставка текста при нажатии кнопки


15-1258353428
Дмитрий С
2009-11-16 09:37
2010.01.17
Вопрос админам. Как правильно настроить отправку почты.