Форум: "Базы";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];
ВнизАбсолютное значение (модуль) поля Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.012 c