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

Вниз

Абсолютное значение (модуль) поля   Найти похожие ветки 

 
Juice ©   (2006-03-14 19:40) [0]

Какая функция используется в Interbase/Firebird чтобы получить абсолютное значение (модуль) поля ?


 
atruhin ©   (2006-03-14 20:20) [1]

1. UDF
Стандартная ib_udf.dll
функция
DECLARE EXTERNAL FUNCTION abs
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT "IB_UDF_abs" MODULE_NAME "ib_udf";
2. CASE WHEN F1 >=0 THEN F1 ELSE -F1 END


 
Juice ©   (2006-03-14 20:33) [2]

У меня Firebird 1.0.3, там ведь Case в запросах не работает ?


 
atruhin ©   (2006-03-14 21:20) [3]

Да, уж.. Там case нет. Тогда только UDF. А почему бы на 1.5.3 не перейти?
Более стабильный. Улучшен синтаксис.


 
Sergey Masloff   (2006-03-14 21:27) [4]

atruhin ©   (14.03.06 21:20) [3]
1.0.3 достаточно стабилен. Ради case переходить? А зачем


 
atruhin ©   (2006-03-14 21:34) [5]

Да, я не спорю. Пока что то работает, сам ни когда не трогаю, хотя бы из-за лени :). Просто если идет доработка, модификация, почему бы и не попробовать перейти? Отрицательные последствия наблюдались только на запросах с ручными планами (да и то редко) , других вроде нет.


 
unknown ©   (2006-03-14 22:30) [6]


> Sergey Masloff   (14.03.06 21:27) [4]
> 1.0.3 достаточно стабилен. Ради case переходить? А зачем

Действительно, зачем? может и IB 6.x потянет? :)
В FB 1.5 уже ODS другая, множество исправлений и дополнений.
Зря что ли проект FireBird развивается ?


 
Sergey Masloff   (2006-03-14 22:37) [7]

unknown ©   (14.03.06 22:30) [6]
Ну 5.6 точно потянул бы. Но с него я со скрипом мигрировал так как тогда было около 400 серверных инсталляций у клиентов. И то служба поддержки стонала. А сейчас их ну не на порядок но в 6 раз точно больше. Представляешь объем работ по переводу? Нет ну на фиг. Пока я принципиального ничего не вижу ради чего стоило бы переходить. Вот появится двойка релиз, появится его (релиза) вторая версия - от тогда, может быть...
 А то и вообще подумать о OracleXE - тачки нормальные сейчас у всех есть ;-)))
 Извините за оффтоп.


 
atruhin ©   (2006-03-14 22:41) [8]

>>множество исправлений и дополнений.
Не забывай что дополнения - доп. глюки. Например в 1.5.1 был глюк с несвоевременным сохранением страниц генераторов, из за чего при сбое питания "слетали" генераторы.


 
unknown ©   (2006-03-14 22:58) [9]

>Sergey Masloff   (14.03.06 22:37) [7]
Ну, оракл он конечно гуд, но я, честно говоря,  не знаю ни одной
задачи, с которой бы справлялся оракл и не справлялся бы FB
(grid и т.п. навороты не в рассчет)

> atruhin ©   (14.03.06 22:41) [8]

FB 1.5.3 - последний (судя по всему) из FB 1.5.x очень даже стабилен,
а про глюки я и не забывал (Они есть всегда, их не может не быть :)))
Но насчет FB 1.5.3.4870 не наблюдал проблем и каких - либо значимых замечаний.


 
Johnmen ©   (2006-03-15 10:30) [10]

ABS можно реализовать и без UDF и без CASE, только стандартными средствами...
:)


 
atruhin ©   (2006-03-15 10:48) [11]

>>Johnmen ©   (15.03.06 10:30) [10]
Открой великую тайну, а то в голову приходят только 2 запроса с union.


 
Johnmen ©   (2006-03-15 10:54) [12]

Одним "простым" запросом. Используется CAST. Это подсказка. Предлагаю подумать, ведь это интересно...:)


 
Виталий Панасенко   (2006-03-15 12:51) [13]


> Johnmen ©   (15.03.06 10:54) [12]
> Одним "простым" запросом. Используется CAST. Это подсказка.
>  Предлагаю подумать, ведь это интересно...:)

Интересно, зачем тогда UDF поставляют ?.:-))


 
atruhin ©   (2006-03-15 14:35) [14]

>>[12] Johnmen ©   (15.03.06 10:54)
Ну уж сдавайтесь :). Ни чего не получается, а очень интересно!


 
Johnmen ©   (2006-03-15 15:02) [15]

>atruhin ©   (15.03.06 14:35) [14]

Сдаюсь :)

SELECT
F *  CAST(CAST(CAST(F + 0.5 AS INTEGER) - 0.5 AS INTEGER) - (CAST(F - 0.5 AS INTEGER)) - 0.5 AS INTEGER)


 
atruhin ©   (2006-03-15 15:15) [16]

Нда. Работает. Ни за что бы не додумался. Сам изобрел?


 
Johnmen ©   (2006-03-15 15:20) [17]

Сам...


 
Виталий Панасенко   (2006-03-15 16:27) [18]

Красиво. Это ты так -1 или 1 получаешь ? т.е. функция Sign ?


 
Johnmen ©   (2006-03-15 17:01) [19]

Нет.
К сожалению, sign таким приёмом можно получить только для целочисленных типов.


 
Виталий Панасенко   (2006-03-15 17:39) [20]


> Johnmen ©   (15.03.06 17:01) [19]
> Нет.
> К сожалению, sign таким приёмом можно получить только для
> целочисленных типов.

Но если ты таким образом получашь что-то отличное от модуля 1, то F*на это что-то уже далеко не модуль F ...


 
Johnmen ©   (2006-03-15 17:46) [21]

Да, в примере [15] F умножается не на sign, но в результате умножения получается abs.
Там же всё элементарно :) Можешь же сам тестануть...


 
Виталий Панасенко   (2006-03-15 17:50) [22]

Зачем тестить ? Математику на отменяли еще: чтобы ты там не навоял, в результате упрощения ДОЛЖНО получиться выражение вида:
-F*-1 или F*1 (или F*0, если F=0. хотя это уже не важно, т.к. F=0) И НИЧЕГО ДРУГОГО..:-))


 
Johnmen ©   (2006-03-15 17:59) [23]

Ну если тебе проще на пальцах просчитать, то ты заметишь, что получаются варианты
-F*-1
F*1
0*2

:)


 
sniknik ©   (2006-03-15 18:01) [24]

> Можешь же сам тестануть...
в mssql не получится (округление при cast "неправильное") надо заменить на
SELECT
F * ROUND(ROUND(ROUND(F + 0.5, 0) - 0.5, 0) - (ROUND(F - 0.5, 0)) - 0.5, 0)


 
Виталий Панасенко   (2006-03-15 18:08) [25]


> Виталий Панасенко   (15.03.06 17:50) [22]


(или F*0, если F=0. хотя это уже не важно, т.к. F=0)



 
Johnmen ©   (2006-03-15 18:14) [26]

>sniknik ©   (15.03.06 18:01) [24]

Да, это для IB/FB с его особенностями округления при CAST"е.


 
Johnmen ©   (2006-03-15 18:33) [27]

>Виталий Панасенко   (15.03.06 17:50) [22]

Что ты хотел сказать постом [22] ?


 
Виталий Панасенко   (2006-03-16 08:59) [28]

Что 0*Число все равно 0. Больше ничего.


 
Johnmen ©   (2006-03-16 09:01) [29]

А есть сомневающиеся?


 
Виталий Панасенко   (2006-03-16 09:24) [30]

Уже не интересно.Спор пустой.Да и спать охота.


 
Johnmen ©   (2006-03-16 09:43) [31]

Вот мне и было интересно, зачем ты пустые сообщения постишь...



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

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

Наверх




Память: 0.53 MB
Время: 0.045 c
15-1145023037
iamdanil
2006-04-14 17:57
2006.05.07
Глюк винды (фотка)


1-1143802681
bns
2006-03-31 14:58
2006.05.07
Определение места AV


2-1145590311
Holod
2006-04-21 07:31
2006.05.07
хм...


1-1143804422
Кашперук Иван
2006-03-31 15:27
2006.05.07
Сохранение файла в exe-шнике


6-1136640560
zag2art
2006-01-07 16:29
2006.05.07
отправка сообщения icmp - reply под Windows XP