Математические функции
Математические функции 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)