Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия | |||
abs [2010/01/10 16:50] peaktop Стала встроенной в 2.1, не в 2.0 |
abs [2010/01/10 17:16] (текущий) peaktop Стала встроенной в 2.1, не в 2.0 |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== ABS() ====== | ||
+ | |||
+ | |||
+ | |||
+ | ===== Версии сервера ===== | ||
+ | ^ ^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.1 ^ 2.5 ^ 3.0 ^ | ||
+ | ^Как [[UDF]] | Да | Да | Да | Да | Да | Да | - | - | - | | ||
+ | ^Как встроенная функция | - | - | - | - | - | - | Да | Да | Да | | ||
+ | |||
+ | |||
+ | ===== Доступно в ===== | ||
+ | [[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ISQL]], [[raznovidnosti_jazyka_sql|PSQL]] | ||
+ | |||
+ | |||
+ | ===== Формат ===== | ||
+ | <code>ABS( < аргумент > )</code> | ||
+ | ^ Аргумент ^ Описание ^ | ||
+ | | < аргумент > | Любой тип данных, приводимый к [[tipy_dannyx|DOUBLE PRECISION]] | | ||
+ | | Возвращает | [[tipy_dannyx|DOUBLE PRECISION]] | | ||
+ | |||
+ | ===== Описание ===== | ||
+ | Функция ABS возвращает абсолютное значение числа, переданного в качестве параметра < аргумент >. | ||
+ | |||
+ | :!: В Firebird версии младше 2.1 для того, чтобы пользоваться этой функцией, ее небходимо подключить к базе данных как [[UDF]]. | ||
+ | |||
+ | ===== Объявление ===== | ||
+ | 1. В Firebird версии младше 2.1 функция объявляется как [[UDF]] в внешнем модуле "ib_udf". | ||
+ | <code sql> | ||
+ | DECLARE EXTERNAL FUNCTION ABS | ||
+ | DOUBLE PRECISION | ||
+ | RETURNS | ||
+ | DOUBLE PRECISION BY VALUE | ||
+ | ENTRY_POINT "IB_UDF_abs" MODULE_NAME "ib_udf"; | ||
+ | </code> | ||
+ | |||
+ | 2. В Firebird версии 2.1 и старше является встроенной функцией при соглашении объявления ее как: | ||
+ | <code sql> | ||
+ | DECLARE EXTERNAL FUNCTION ABS | ||
+ | DOUBLE PRECISION | ||
+ | RETURNS | ||
+ | DOUBLE PRECISION BY VALUE | ||
+ | ENTRY_POINT "IB_UDF_abs" MODULE_NAME SYSTEM; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== Пример ===== | ||
+ | Допустим, существует таблица CUSTOMERS с доменами ID [[tipy_dannyx|INTEGER]] и AMOUNT [[tipy_dannyx|DOUBLE PRECISION]], который может быть отрицательным. | ||
+ | |||
+ | Требуется выбрать из таблицы все записи, указав абсолютное значение домена AMOUNT. | ||
+ | |||
+ | 1) [[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ISQL]] | ||
+ | <code sql> | ||
+ | SELECT ABS(C.AMOUNT) | ||
+ | FROM CUSTOMERS C | ||
+ | </code> | ||
+ | |||
+ | 2) [[raznovidnosti_jazyka_sql|PSQL]] | ||
+ | <code sql> | ||
+ | SET TERM !!!; | ||
+ | |||
+ | CREATE OR ALTER PROCEDURE CUST_AMOUNT RETURNS ( | ||
+ | CUST_ID INTEGER | ||
+ | ,AMOUNT DOUBLE PRECISION | ||
+ | )AS | ||
+ | BEGIN | ||
+ | FOR | ||
+ | SELECT C.ID, C.AMOUNT | ||
+ | FROM CUSTOMERS C | ||
+ | INTO :CUST_ID, :AMOUNT | ||
+ | DO | ||
+ | BEGIN | ||
+ | AMOUNT = ABS(:AMOUNT); | ||
+ | SUSPEND; | ||
+ | END | ||
+ | END !!! | ||
+ | |||
+ | SET TERM ; !!! | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== См. также ===== | ||
+ | [[UDF]], [[vstroennye_funkcii|Встроенные функции]] | ||
+ | |||
+ | ===== Источник ===== | ||
+ | langref.pdf |