Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
2-1145620631
Zaq123
2006-04-21 15:57
2006.05.07
Ansi to OEM


6-1137685582
Ibrox
2006-01-19 18:46
2006.05.07
Трафик


1-1143799518
Andreus
2006-03-31 14:05
2006.05.07
Как получить расширение файла открываемого OpenDialog1.FileName


2-1145420179
Rubey
2006-04-19 08:16
2006.05.07
Централизованная БД для сбора информации


2-1145185406
Golik
2006-04-16 15:03
2006.05.07
Запрос на выборку .





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