Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Математические функции

Математические функции

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);

Подобная проверка может быть использована в случае, когда для расфасованных элементов указана цена за единицу, а не за расфасовку

FREEUDFLIB

F_MODULO(VALUE1, VALUE2)

Win32

Функция возвращает остаток отделения двух целых чисел

Аргументы

VALUE1 и VALUE2 являются столбцами или выражениями, которые вычисляются в числа типа SMALLINT или INTEGER

Возвращаемое значение

Число целого типа

Замечания

Эта версия функции получения остатка от деления может быть более полезной, чем MOD(), В сложных выражениях, где возвращаемое значение является частью другого выражения, которое оперирует целыми числами.(MOD() возвращает число с плавающей точкой.)

Пример

Фрагмент из триггера:

... IF (MODULO(NEW.HOURS * 100, 775) > 0.25) THEN ; NEW.OVERTIME_HOURS = MODULO(NEW.HOURS * 100, 775) / 100;

Связанные или похожие функции

См. также функцию MOD(), которая возвращает число с плавающей точкой

FREEUDFLIB

F_ROUNDFLOAT(VALUE1, VALUE2)

Win32

Округляет передаваемое значение до ближайшего значения, которое больше или меньше заданной дробной части

Аргументы

VALUE1: столбец или выражение, результатом вычисления которого является тип с плавающей точкой. Это округляемое число.

VALUE2: столбец или выражение, результатом вычисления которого является тип с плавающей точкой. Это должно быть число меньше 1 и больше 0. Например, передайте значение 0.25 для округления до ближайшей четверти

Возвращаемое значение

Число с плавающей точкой, которое является VALUE1, округленным до ближайшей дробной части VALUE2

Пример

Следующий оператор вычисляет PAID_HOURS, округляя HOURS WORKED до ближайшей четверти часа:

UPDATE TIMESHEET

SET PAID HOURS = F_ROUNDFLOAT(HOURS WORKED, 0.25)

WHERE DATE_TIMESTAMP > CURRENT_DATE - 7;

Связанные или похожие функции

См. также ROUND()

FREEUDFLIB

F_TRUNCATE(VALUE)

Win32

Усекает число с плавающей точкой до целого

Аргументы

VALUE является столбцом или выражением, результатом вычисления которого является число с плавающей точкой

Возвращаемое значение

Убирает дробную часть у VALUE и возвращает целую часть в виде целого типа

Пример

Следующий оператор вернет целое число:

SELECT F_TRUNCATE(SUM(AMT_OUTSTANDING)) AS

ESTIMATED_DEBTORS

FROM ACCOUNT

WHERE AMT_OUTSTANDING > 0;

Связанные или похожие функции

См. также TRUNCATE() и ROUND()

IB_UDF

FLOOR(VALUE)

Linux, Win32

Возвращает значение с плавающей точкой, представляющее наибольшее целое, меньшее или равное VALUE

Аргументы

VALUE является столбцом или выражением, вычисляемым в число типа DOUBLE PRECISION

Возвращаемое значение

Число типа DOUBLE PRECISION С нулевой дробной частью

Пример

SELECT FLOOR (CURRENT_DATE - START_DATE) AS

DAYS_ELAPSED

FROM DVD_LOANS;

IB_UDF

LN(VALUE)

Linux, Win32

Возвращает натуральный логарифм числа

Аргументы

VALUE является столбцом или выражением, вычисляемым в число типа DOUBLE PRECISION

Возвращаемое значение

Число типа DOUBLE PRECISION

Пример

SELECT LN ( (CURRENT_TIMESTAMP - LEASE_DATE) / 7) AS

NLOG_WEEKS

FROM LEASE_ACCOUNT ;

IB_UDF

LOG(VALUE1, VALUE2)

Linux, Win32

Возвращает логарифм по основанию x = VALUE1 числа у = VALUE2

Аргументы

VALUE1 (основание логарифма) и VALUE2 (число, с которым проводится операция) являются столбцами или выражениями, вычисляемыми в числа типа DOUBLE PRECISION

Возвращаемое значение

Число типа DOUBLE PRECISION

Замечания

Firebird 1.0.x и версии InterBase в этой функции имеют ошибку: log(x.y) ошибочно инвертирует аргументы и возвращает логарифм по основанию у числа x. Это было исправлено в версии 1.5. Имейте в виду, что существующие хранимые процедуры и код приложения могут иметь корректировки для этой ошибки

Пример

SELECT LOG(8, (CURRENT_TIMESTAMP - LEASE_DATE) /7) AS

LOG_WEEKS

FROM LEASE_ACCOUNT;

IB_UDF

LOG10(VALUE)

Linux, Win32

Возвращает десятичный логарифм входного числа

Аргументы

VALUE является столбцом или выражением, вычисляемым в число типа DOUBLE PRECISION

Возвращаемое значение

Число типа DOUBLE PRECISION

Пример

SELECT LOG1O( (CURRENT_TIMESTAMP - LEASE_DATE) / 7) AS

LOG10_WEEKS FROM LEASE_ACCOUNT ;

IB_UDF

MODULO(VALUEl, VALUE2)

Linux, Win32

Функция возвращает остаток отделения двух целых чисел

Аргументы

VALUE1 и VALUE2 являются столбцами или выражениями, вычисляемыми в числа типа SMALLINT или INTEGER

Возвращаемое значение

Число типа DOUBLE PRECISION

Пример

Фрагмент триггера:

...IF (MODULO(NEW.HOURS * 100, 775) > 25.0) THEN

NEW.OVERTIME_HOURS = MODULO(NEW.HOURS * 100, 775) / 100;

Связанные или похожие функции

См. также функцию f_Modulo(), которая возвращает целое число

IB_UDF

PI()

Linux, Win32

Возвращает значение n = 3.14159...

Аргументы

Аргументы отсутствуют, однако скобки требуются

Возвращаемое значение

Значение n в виде числа DOUBLE PRECISION

Пример

SELECT PI() AS PI_VALUE FROM RDB$DATABASE;

IB_UDF

RAND()

Linux, Win32

Возвращает случайное число в диапазоне между 0 и 1. Заметьте, что эта функция не работает в Firebird 1.5

Аргументы

Аргументы отсутствуют, но скобки требуются

Возвращаемое значение

Число типа DOUBLE PRECISION

Замечания

В настоящее время используется для установления начального значения генератора

Пример

SELECT RAND() AS RANDOM NUMBER FROM RDB$DATABASE;

IB_UDF

ROUND(VALCE)

Linux, Win32

Округляет число с фиксированной точкой до ближайшего целого

Аргументы

VALUE является столбцом или выражением, вычисляемым в число с фиксированной точкой с дробными разрядами >0

Возвращаемое значение

Число целого типа

Замечания

Это полное округление. Если цифра сразу после десятичной точки больше или равна 5, то к цифре перед десятичной точкой добавляется единица, и у числа отсекаются дробные цифры. В противном случае просто отсекаются все дробные цифры

Пример

Следующий оператор составляет смету на основе результата округления произведения двух чисел NUMERIC(11,2):

SELECT JOB_NO, ROUND(RATE * HOURS) + 1 AS ESTIMATE

FROM QUOTATION

WHERE RATE IS NOT NULL AND HOURS IS NOT NULL;

Связанные или похожие функции

См. также TRUNCATE(), F_ROUNDFLOAT()

IB_UDF

SIGN(VALUE)

Linux, Win32

Возвращает 0, 1 или -1 в зависимости от того, является ли входное значение положительным, нулем или отрицательным соответственно

Аргументы

VALUE является столбцом или выражением, вычисляемым в число типа DOUBLE PRECISION

Возвращаемое значение

Число типа DOUBLE PRECISION

Пример

Фрагмент триггера:

... IF (SIGN(NEW.CURRENT_VALUE) < 1) THEN ...;

IB_UDF

SQRT(VALUE)

Linux, Win32

Возвращает квадратный корень числа

Аргументы

VALUE является столбцом или выражением, вычисляемым в число типа DOUBLE PRECISION

Возвращаемое значение

Число типа DOUBLE PRECISION

Пример

Фрагмент триггера:

... IF (SQRT(NEW.HYPOTENUSE) = SQRT(NEW.SIDE1) +

SQRT(NEW.SIDE2)) THEN

NEW.RIGHT ANGLED TRIANGLE = 'T';

FBUDF

TRUNCATE(VALUE)

Linux, Win32

Усекает тип с фиксированной точкой до следующего меньшего целого

Аргументы

VALUE является столбцом или выражением, вычисляемым в число с фиксированной точкой с дробными разрядами > 0

Возвращаемое значение

Число целого типа

Замечания

Как и для некоторых других функций из этой библиотеки, вам нужно два объявления, чтобы использовать 32- и 64-битовый вход. Проверьте объявления в скрипте fdudf.sql truncate и i64truncate

Пример

Следующий оператор составляет смету на основе результата усечения произведения двух чисел NUMERIC (11,2):

SELECT JOB_NO,

TRUNCATE (RATE * HOURS) + 1 AS ESTIMATE FROM QUOTATION

WHERE RATE IS NOT NULL AND HOURS IS NOT NULL;

Связанные или похожие функции

См. также ROUND(), F_TRUNCATE()

Оглавление книги


Генерация: 0.048. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз