![]() |
![]() |
![]() |
Математические функции Математические функции PostgreSQL выполняют стандартные арифметические и тригонометрические операции и работают с разными типами данных. В большинстве случаев тип возвращаемого значения совпадает с типом аргументов функции. В табл. 5.9 приведена сводка основных математических функций PostgreSQL. Таблица 5.9. Математические функции PostgreSQL
Ниже приведены более подробные описания всех функций, перечисленных в таблице, с указанием аргументов, типов данных и выполняемых действий. Хотя функция обычно принимает аргументы лишь одного типа, 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) |
![]() |
![]() |
![]() |