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

 

Математические функции PostgreSQL выполняют стандартные арифметические и тригонометрические операции и работают с разными типами данных. В большинстве случаев тип возвращаемого значения совпадает с типом аргументов функции. В табл. 5.9 приведена сводка основных математических функций PostgreSQL.

 

Таблица 5.9. Математические функции PostgreSQL

Функция Описание
abs(x) Возвращает модуль (абсолютное значение) х
acos(x) Возвращает арккосинус х
asin(x) Возвращает арксинус х
atan(x) Возвращает арктангенс х
atan2(x.y) Возвращает арктангенс х/у
cbrt(x) Возвращает кубический корень х
ceil (x) Возвращает минимальное целое число, не меньшее х (округление в верхнюю сторону)
cos(x) Возвращает косинус х
cot(x) Возвращает котангенс х
degrees(r) Возвращает количество градусов в г радиан
exp(x) Возвращает константу е (2,71828…) в степени х
floor(x) Возвращает максимальное целое число, не большее х (округление в нижнюю сторону)
ln(x) Возвращает натуральный логарифм х (функция, обратная ехр(х))
log(b.x) Возвращает логарифм х по основанию b
log(x) Возвращает десятичный логарифм х
modtx.yj Возвращает остаток от деления х/у
pi О Возвращает константу к (3,14159…)
pow(x.y) Возвращает х в степени у
radians(d) Возвращает количество радиан в d градусов
ranaomO Возвращает псевдослучайное число в интервале от 0,0 до 1,0
round(x) Возвращает число х, округленное до ближайшего целого
sin(x) Возвращает синус х
sqrt(x) Возвращает квадратный корень х
tan(x) Возвращает тангенс х
trunc(x) Возвращает целую часть х
trunc(x.s) Возвращает значение х, усеченное до s цифр в дробной части

Ниже приведены более подробные описания всех функций, перечисленных в таблице, с указанием аргументов, типов данных и выполняемых действий. Хотя функция обычно принимает аргументы лишь одного типа, PostgreSQL при необходимости пытается привести переданные аргументы к нужному типу. Если попытка автоматического преобразования типа завершается неудачей, PostgreSQL выводит сообщение об ошибке и вы можете попытаться выполнить явное преобразование. Дополнительная информация о явном преобразовании типов приведена в главе 3.

abs(x)

Синтаксис:

abs(x)

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

Аргумент функции abs() может относиться к любому из числовых типов данных (numeric, bigint, small int, real или double precision). Тип возвращаемого значения совпадает с типом аргумента.

Пример

testdb=# SELECT abs(lOO) AS abs_positive.

testdb-# abs(-lOO) AS absjiegative:

abs_positive | absjiegative

100 100

(1 row)

acos()

Синтаксис:

acos(x)

Функция acos () возвращает арккосинус аргумента х, относящегося к типу doubl e precision и лежащему в интервале допустимых значений косинуса (от -1 до 1). Фактически является обратной по отношению к функции cos(). Результат представляет собой угол (в радианах) в интервале от 0 до я, выраженный типом double precision.

Пример

testdb=# SELECT acos(l). acos(O),

acos(-l). testdb-# acos(cosd)) AS inverse_example:

acos | acos | acos | inverse_example

0 | 1.5707963267949 | 3.14159265358979 |

(1 row)

asin()

Синтаксис:

asln(x)

Функция as1n() возвращает арксинус аргумента х, относящегося к типу double jrecisi on и лежащему в интервале допустимых значений синуса (от -1 до 1). Факти-lecKii является обратной по отношению к функции sin(). Результат представляет со-юй угол (в радианах) в интервале от -я/2 до л/2, выраженный типом doubl e preci s I on.

Пример

testdb=# SELECT asin(l), asin(O), asin(-l),

testdb-# asin(sind)) AS inverse_examp1e;

asin | asin [ asin [ lnverse_example

1.5707963267949 0 | -1.5707963267949 | 1

(1 row)

itan()

Синтаксис:

itan(x)

Функция atari О возвращает арктангенс аргумента х, относящегося к типу doubl e )reci slon. Фактически является обратной по отношению к функции tan(). Результат представляет собой угол (в радианах) в интервале от -л/2 де я/2, выраженный типом double precision.

Пример

testdb=# SELECT atan(l). atan(O). atan(-l),

testdb-# atan(tand)) AS inverse_example;

atan atan | atan | inverse_example

0.785398163397448 | 0 | -0.785398163397448 | 1

(1 row)

itan2()

Синтаксис:

3tari2(x.y)

По аналогии с функцией atan(), функция atan2() возвращает арктангенс, то есть угол (в радианах) в интервале от -я/2 до я/2, выраженный типом doubl e preci si on. Однако в отличие от atan() она получает два аргумента типа double precision вместо одного и возвращает арктангенс величины, полученной делением первого аргумента на второй.

В общем случае вызов функции atan2(x,y) эквивалентен вызову atan(x/y), но при передаче аргумента у=0 функции atan2() не происходит ошибки деления на ноль, как при вызове atan() для величины х/у. Если аргумент у равен нулю, функция atan2() возвращает я/2 для положительных значений х, -я/2 для отрицательных х и 0 для х=0.

Пример

testdb=# SELECT atan2(0, 1). atan2(l, 1),

testdb-# atanCO / 1) AS functionally.

testdb-# atand / 1) AS identical;

atan2 atan2 | functionally identical

0 i 0.785398163397448 | 0 | 0.785398163397448 (1 row)

testdb=# SELECT atan2(l, 0) AS positive_x.

testdb-# atan2(-l, 0) AS negative_x,

testdb-# atan2(0, 0) AS zero_x,

testdb-i pi() / 2 AS pi_over_two:

positive_x | negative_x | zero_x \ pi_over_two

1.5707963267949 | -1.5707963267949 | 0 | 1.5707963267949

(1 row)

cbrt()

Синтаксис:

cbrt()

Функция cbrt () получает один числовой аргумент х типа doubl e preci si on и возвращает кубический корень, также представленный типом double precision. Фактически является обратной по отношению к функции pow(), выполняющей возведение в третью степень.

Пример

testdb=# SELECT pow(2.0. 3) AS «two cubed».

testdb-# cbrt(8.0) AS «eight’s cube root»;

two cubed | eight’s cube root

8 | 2

(1 row)

ceil()

Синтаксис:

ceil(x)

Функция cei 1 () получает один числовой аргумент х, относящийся к любому из числовых типов данных (numeric, bigint, smallint, real или double precision), и округляет его до минимального целого, не меньшего переданной величины. Целые числа остаются без изменений.

Пример

testdb=# SELECT ceil(1.0). ceil(1.1), ceil(1.5);

ceil | ceil ceil

1 | 2 | 2

(1 row)

COS()

Синтаксис:

COSU)

Функция cos О получает один аргумент х типа double precision, представляющий угол в радианах, и возвращает косинус этого угла в виде типа doubl e preci si on.

Пример

testdb=# SELECT cos (pi О) AS cosj>i.

testdb-# cos(O) AS cos_zero:

cos_pi | cos_zero

1 | 1

(1 row)

cot()

Синтаксис:

cot(x)

Функция cot() получает один аргумент х типа double precision, представляющий угол в радианах, и возвращает котангенс этого угла в виде типа doubl e preci s i on. Аргумент должен быть отличным от нуля.

Пример

testdb=# SELECT cot(l). cot(-l):

cot cot

0.642092615934331 | -0.642092615934331

(1 row)

degrees()

Синтаксис:

degrees(r)

Функция degreesO получает аргумент г типа double precision, представляющий угол в радианах, и преобразует его в градусы. Возвращаемое значение относится к типу double precision. Фактически функция degreesO является обратной по отношению к функции radians().

Пример

testdb=# SELECT degrees(acos(-D) AS half_circle.

testdb-# degrees(pi) * 2) AS ful1_circle:

half_circle | full_circle

180 | 360

(1 row)

exp()

Синтаксис:

exp(x)

Функция получает один аргумент х типа numeri с или doubl e preci si on и возвращает его экспоненту, то есть результат возведения константы е в заданную степень.

Пример

testdb=# SELECT exp(O.O) AS one.

testdb-# exp(l.O) AS e.

testdb-* exp(2.0) AS «e squared»:

one I e I e squared

1 | 2.71828182845905 | 7.38905609893065

(1 row)

floor()

Синтаксис:

floor(x)

Функция f 1 оог() получает один аргумент х типа numeri с и округляет его до максимального целого, не большего переданной величины. Целые числа остаются без изменений.

Пример

testdb=# SELECT floor(l.O) AS one.

testdb-# floor(1.1) AS «one point one»,

testdb-# floord.8) AS «one point eight»;

one one point one one point eight

1 | 1 | 1

(1 row)

ln()

Синтаксис:

ln(x)

Функция ln(x) получает один аргумент х типа numeric или double precision и возвращает его натуральный логарифм. Фактически является обратной по отношению к функции ехр(). Эквивалентна вызову функции log() с передачей основания е.

Пример

testdb=# SELECT In(lO.O) AS naturaljog.

testdb-| log(expd.O). 10.0) AS naturaljog,

testdb-# In(expdO.O)) AS inverse_example:

naturaljog | naturaljog | inverse_example

2.30258509299405 | 2.30258509299404 | 10

(1 row)

log()

Синтаксис:

log(x) log(b.x)

Функция log() получает один или два аргумента типа numeric. Если передан один аргумент, возвращается его десятичный логарифм. Если переданы два аргумента, функция log(b.x) возвращает логарифм х по основанию Ь.

Пример

testdb=# SELECT log(12.0) AS logj.2.

testdb-# logdO. 12.0) AS logj.2.

testdb-# log(3, 12.0) AS «log 12. base 3»;

logJ2 logJ2 log 12. base 3

1.07918124604762 | 1.0791812460 | 2.2618595071

(1 row)

mod()

Синтаксис:

mod(x.y)

Функция mocK) получает два аргумента х и у, относящихся к числовым типам numeric, Integer, smallint или bigint. Возвращаемое значение представляет собой остаток от деления х на у.

Пример

testdb=# SELECT mod(5. 5) AS no_remainder.

testdo-# mod(6, 5) AS remainder_one,

mod(19. 5) AS remainder_four;

no_remainder | rema1nder_one | remainder_four

0 | 1 | 4

(1 row)

pi()

Синтаксис:

pi()

Функция pi () вызывается без аргументов и возвращает константу п, примерно равную 3,14159265358978.

Пример

testdb=# SELECT pi() AS «the pi constant»:

the pi constant

3.14159265358979

(1 row)

pow()

Синтаксис:

pow(x.y)

Функция pow() получает два аргумента х и у, относящихся к числовым типам numeri с или doubl e preci s i on. Возвращаемое значение представляет собой результат возведения х в степень у. Тип данных результата совпадает с типом переданных аргументов. Следует помнить, что аргументы должны содержать десятичную точку.

Пример

testdb=# SELECT pow(2.0, 3.0) AS «two cubed».

testdb-# pow(2.0, 2.0) AS «two squared».

testdb-# pow(2.0, 1.0) AS «just two»;

two cubed | two squared just two

8 | 4 2

(1 row)

radlans()

Синтаксис:

radians(d)

Функция radians () получает аргумент d типа double precision, представляющий угол в градусах, и преобразует его в радианы. Возвращаемое значение относится к типу double precision. Фактически функция radiansO является обратной по отношению к функции degrees ().

Пример

testdb=# SELECT radians(180) AS ha1f_circle.

testdb-# radians(360) AS fu11_circle;

half_circle | full_cnrcle

3.14159265358979 | 6.28318530717959

(1 row)

random ()

Синтаксис:

randon ()

Функция random() вызывается без аргументов и возвращает псевдослучайное число типа double precision в интервале от 0,0 до 1,0. При каждом вызове randonK) генерируется новое значение, даже если функция вызывается несколько раз в одном запросе.

Обычно функция random() используется в сочетании с математическими операторами (например, + и *) для получения псевдослучайных чисел в заданном интервале и последующим вызовом одной из функций округления (roundC), trunc() и т. д.).

Пример

testdb=# SELECT randonK) AS natural random,

testdb-# round(randomO * 9) + I AS one_through_ten.

testdb-# truncC randonK) * 99) + 1 AS one_through_one_hundred:

natural_random | one_through_ten | one_through_one_hundred

0.478887704424042 | 2 | 37

(1 row)

round ()

Синтаксис:

round(x) round(x.s)

Функция roundO вызывается с одним или с двумя аргументами. Первый аргумент х относится к типу numeric или double precision и определяет округляемое число. Второй необязательный аргумент s относится к типу integer и определяет количество цифр в дробной части после округления. Тип возвращаемого значения совпадает с типом первого аргумента.

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

Пример

testdb=# SELECT round(l.O) AS one,

testdb-# round(l.l) AS «one point one»,

testdb | round(1.5) AS «one point five»,

testdb-# roundd.8) AS «one point eight»;

one | one point one |

one point five | one point eight

1 | 1 | 2 | 2

(1 row)

testdb=# SELECT round(1.4949. 1) AS one_digit_scale.

testdb-# roundd.4949, 3) AS three_digit_scale.

testdb-# roundd.4949, 10) AS ten_digit_scale.

testdb-# roundd.4949. 0) AS rounded;

one_digit_scale | three_digit_scale | ten_digit_scale rounded

1.5 1.495 | 1.4949000000 1

(1 row)

Sin()

Синтаксис:

Sin(x)

Функция si n () получает один аргумент х типа doubl e preci si on, представляющий угол в радианах, и возвращает синус этого угла в виде значения типа doubl e preci si on.

Пример

testdb=# SELECT sin(pi() / 4) AS quarter_pi,

testdb-# sin(pi() / 2) AS half_pi:

quarter_pi | half_pi

0.707106781186547 |

(1 row)

sqrt()

Синтаксис:

sqrt()

Функция sqrt() получает один числовой аргумент х типа double precision или lumeric и возвращает квадратный корень, при этом тип возвращаемого значения ювпадает с типом аргумента. Фактически является обратной по отношению к Ьункции pow(), выполняющей возведение во вторую степень.

Пример

estdb=# SELECT sqrt(2.0), sqrt(4.0),

estdb-# sqrt(pow(2.0, 2)) AS inverse_example:

sqrt | sqrt | inverse_exampl

1.4142135623731 2 | 2

(1 row)

tan()

Синтаксис:

tan(x)

Функция tan() получает один аргумент х типа doubl e preci si on, представляющий тол в радианах, и возвращает тангенс этого угла в виде значения типа doubl e preci s i on.

Пример

testdb=# SELECT tan(pi() / 8).

testdb-# tan(O): tan | tan

0.414213562373095 |

(1 row)

trunc()

Синтаксис:

trunc(x) trunc(x.s)

Функция trunc() вызывается с одним или с двумя аргументами. Первый аргумент х относится к типу numeric или double precision и определяет исходное число. Второй необязательный аргумент s относится к типу integer и определяет количество цифр в дробной части после усечения.

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

Пример

testdb=# SELECT trunc(1.598) AS natural-truncation.

testdb-# trunc(1.598. 1) AS one_decima1_point,

testdb-# trunc(1.598, 8) AS extra_places:

natural_truncation one_decimal_point | extra_places

1 | 1.5 | 1.59800000

(1 row)