Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
FBUDF | INVL(VALUE1, VALUE2) |
Linux, Win32 | Эта функция пытается повторить функцию Oracle NVL только для числовых типов с фиксированной точкой. Она возвращает указанное непустое значение, если заданный столбец имеет значение NULL |
Аргументы | VALUE1: столбец или выражение, включающее столбец. Типы с плавающей точкой не поддерживаются. При необходимости используйте в вашем выражении CAST для преобразования значения в числовой тип. VALUE2: выражение или константа, которая будет возвращаемым значением, если VALUE1 дает NULL |
Возвращаемое значение | Непустое значение. Если VALUE1 не является NULL, то оно будет возвращаемым значением; иначе будет возвращаться VALUE1. Если и VALUE1, и VALUE2 имеют значение NULL, то будет возвращено значение NULL |
Замечания | Логически эта функция эквивалентна простой форме функции COALESCE О версии 1.5, когда она используется со столбцом Она должна рассматриваться как нерекомендуемая для Firebird версии 1.5 и выше. Внешняя функция iNVL существует в трех реализациях: две для 32-битовых и 16-битовых типа (invl и dnvi), а третья для 64-битовых типов (i64nvi). Если вы хотите использовать ее с любыми числовыми типами с фиксированной точкой, объявите все реализации. Объявления можно найти в скрипте fbudf.sql в каталоге /UDF вашей инсталляции Firebird. Не объявляйте реализацию i64nvi для баз данных, которые не поддерживают 64-битовые числа - например, для не перенесенной базы данных InterBase 5 |
Пример | Следующий запрос возвращает 0, если STOCK имеет значение NULL: SELECT PRODUCT ID, PRODUCT NAME, INVL(STOCK, 0) FROM PRODUCTS; |
Связанные или похожие функции | См. также sNVL, iNullIf, внутреннюю функцию COALESCE |
FBUDF | SNULLIF(VALUE1, VALUE2) |
Linux, Win32 | Возвращает NULL для подвыражения, если оно иначе возвращает значение этого подвыражения. Применимо только для символьных типов и должно быть использовано только в Firebird 1,0.x. В Firebird 1.5 и выше используйте NULLIFO |
Аргументы | VALUE1: столбец или вычисляемое выражение. VALUE2: константа или выражение, с которым сравнивается VALUE1. ЕСЛИ они равны, SNULLIF вернет NULL |
Возвращаемое значение | NULL, если VALUE1 и VALUE2 равны. Если не равны, то возвращается VALUE1 |
Замечания | SNOLLIF имеет результат, эквивалентный использованию внутренней функции SQL NULLIFO, реализованной в Firebird 1.5 и выше с символьными типами |
Пример | Следующий запрос устанавливает значение столбца IS_REGISTERED в NULL для всех столбцов, где его значение ' Т', a REGISTERED имеет значение NOLL: UPDATE ATABLE SET IS REGISTERED = SNOLLIF(IS REGISTERED, 'T') WHERE REGISTRATION_DATE IS NULL; |
Связанные или похожие функции | См. также iNullif. Для Firebird 1.5 и вышё см. внутреннюю функцию NULLIF |
FBUDF | SNVL(VALUE1, VALUE2) |
Linux, Win32 | Эта функция пытается повторить функцию Oracle NVLO только для строковых типов. Она возвращает указанное непустое значение, если заданный столбец имеет значение NULL |
Аргументы | VALUE1: столбец или выражение, включающее столбец. VALUE2: выражение или константа, которая будет возвращаемым значением, если VALUE1 дает NOLL |
Возвращаемое значение | Непустое значение. Если VALUE1 не является NULL, то оно будет возвращаемым значением; иначе будет возвращаться VALUE2. Если и VALUE1, и VALUE2 имеют значение NULL, ТО будет возвращено значение NULL |
Замечания | Логически эта функция эквивалентна простой форме функции COALESCE версии 1.5, когда она используется со столбцом символьного типа, а именно COALESCE(VALUE1, VALUE2). Она должна рассматриваться как нерекомендуемая для Firebird 1.5 и выше |
Пример | Следующий оператор вычисляет и выводит столбец времени выполнения BIRTH YEAR для каждого студента. Если это значение вычисляется в NULL, то вместо дня рождения выводится 'Not known' (Неизвестно): SELECT FIRST_NAME, LAST_NAME, SNVL(CAST(EXTRACT(YEAR FROM BIRTH DATE) AS VARCHAR (9) ) , ' Not known') AS BIRTH_YEAR FROM STUDENT_REGISTER; |
Связанные или похожие функции | См. также iNVL, sNullif , внутреннюю функцию COALESCE |
Математические функции
IB_UDF | ABS(VALUE) |
Linux, Win32 | Возвращает абсолютное значение числа |
Аргументы | VALUE является столбцом или выражением, которое совместимо с типом DOUBLE PRECISION |
Возвращаемое значение | Число DOUBLE PRECISION |
Пример | Этот оператор суммирует все отрицательные значения и возвращает итог в виде положительного числа: SELECT ABS(SUM(ASSET_VALUE)) AS LIABILITY FROM ASSET_REGISTER WHERE ASSET VALUE < 0; |
Похожие функции | См. другую внешнюю функцию f_DoubleAbs, которая выполняет те же действия |
IB_UDF | BIN_AND(VALUE1, VALUE2) |
Linux, Win32 | Возвращает результат побитовой операции AND (И), выполняемой с двумя входными значениями |
Аргументы | VALUE1 и VALUE2, являются столбцами или выражениями, которые преобразуются к типу SMALLINT или INTEGER |
Возвращаемое значение | Значение INTEGER |
Пример | SELECT BIN_AND (128,24) AS ANDED_ RESULT FROM RDB $ DATABASE; |
IB_UDF | BIN_OR(VALUE1, VALUE2) |
Linux, Win32 | Возвращает результат двоичной (побитовой) операции OR (ИЛИ), выполняемой с двумя входными значениями |
Аргументы | VALUE1 и VALUE2 являются столбцами или выражениями, которые преобразуются К типу SMALLINT или INTEGER |
Возвращаемое значение | Значение INTEGER |
Пример | SELECT BIN_OR(128, 24) AS ORED_RESULT FROM RDB$DATABASE; |
IB_UDF | BIN_XOR(VALUE1, VALUE2) |
Linux, Win32 | Возвращает результат двоичной (побитовой) операции XOR (исключающее ИЛИ), выполняемой с двумя входными значениями |
Аргументы | VALUE1 и VALUE2 являются столбцами или выражениями, которые преобразуются К типу SMALLINT или INTEGER |
Возвращаемое значение | Значение INTEGER |
Пример | SELECT BIN_XOR(128, 24) AS EXORED_RESULT FROM RDB$DATABASE; |
IB_UDF | CEILING(VALUE) |
Linux, Win32 | Возвращает значение типа DOUBLE PRECISION, представляющее наименьшее целое, большее или равное входному значению |
Аргументы | VALUE является столбцом или выражением, которое дает число типа DOUBLE PRECISION |
Возвращаемое значение | Число DOUBLE PRECISION С нулевым количеством дробных знаков |
Пример | SELECT CEILING (LAST_TOTAL) AS ROUND_UP_NEAREST FROM SALES_HISTORY; |
IB_UDF | DIV(VALUE1, VALUE2) |
Linux, Win32 | Делит два целых числа и возвращает частное, отбрасывая дробную часть |
Аргументы | VALUE1 и VALUE2 являются столбцами или выражениями, которые преобразуются к числам типа SMALLINT или INTEGER |
Возвращаемое значение | Число DOUBLE PRECISION с нулевым количеством дробных знаков |
Пример | SELECT DIV(TERM, (CURRENT_DATE - START_DATE) / 365) AS YEARS_REMAINING FROM MORTGAGE_ACCOUNT WHERE ACCOUNT_ID = 12345; |
FBUDF | DPOWER(VALUE, EXPONENT) |
Linux, Win32 | Получает число и показатель степени и возвращает степень числа |
Аргументы | EXPONENT является столбцом или выражением, которое дает число типа DOUBLE PRECISION |
Возвращаемое значение | Возвращает степень числа в виде DOUBLE PRECISION |
Пример | SELECT DPOWER(2.64575,2) AS NEARLY_7 FROM RDB$DATABASE; |
Связанные или похожие функции | См. также SQRTO |
FREEUDFLIB | F_DOUBLEABS(VALUE) |
Win32 | Возвращает абсолютное значение числа с плавающей точкой |
Аргументы | VALUE является столбцом или выражением, которое преобразуется в число типа DOUBLE PRECISION или FLOAT |
Возвращаемое значение | Положительное число типа DOUBLE PRECISION |
Пример | SELECT ABS(SUM(ASSET_VALUE) ) AS LIABILITY FROM ASSET REGISTER WHERE ASSET VALUE < 0; |
Связанные или похожие функции | См. также другую внешнюю функцию ABS, которая выполняет ту же самую задачу и доступна не только на платформах Windows |
FREEUDFLIB | F_ISDVISIBLEBY(VALUE1, VALUE2) |
Win32 | Определяет, является ли значение нацело делимым на другое значение (то есть является ли VALUE2 делителем VALUE1). Возвращает 1, если числитель(VALUE1) нацело делится на знаменатель(VALUE2); иначе возвращает 0 |
Аргументы | VALUE1: столбец или выражение, результатом вычисления которого является целый тип - число, которое будет делиться (числитель). VALUE2: другое целое - число, используемое в качестве знаменателя |
Возвращаемое значение | Возвращает 1, если истинно, 0, если ложно |
Пример | Эта функция может быть вызвана из ограничения CHECK, как в следующем примере: ALTER TABLE ORDER DETAIL ADD CONSTRAINT CHECK_MULTIPLE CHECK (ISDIVISIBLEBY (ORDER_QTY, PACK_QTY) = 1); Подобная проверка может быть использована в случае, когда для расфасованных элементов указана цена за единицу, а не за расфасовку |