×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.6.3. Математические функции и операторы

Математические операторы предусмотрены для многих СУБД PostgreSQL типов данных. Для типов данных, не имеющих общепринятых математических правил (например, типов даты и времени), фактическое поведение описывается в последующих разделах.

Таблица 2.6.4 представлены математические операторы, доступные для стандартных числовых типов. Если не указано иное, операторы, принимающие numeric_type доступны для всех типов данных smallint, integer, bigint, numeric, real, и double precision. Операторы, для которых указано, что они принимают integral_type доступны для типов данных smallint, integer, и bigint. За исключением особо оговоренных случаев, каждая форма оператора возвращает тот же тип данных, что и его аргументы. Вызовы, включающие несколько типов данных аргументов, такие как integer + numeric, разрешаются с использованием типа данных, указанного в данных списках позже.

Таблица 2.6.4. Математические операторы

Оператор

Описание

Примеры

numeric_type + numeric_typenumeric_type

Сложение

2 + 35

+ numeric_typenumeric_type

Унарный плюс (без действия)

+ 3.53.5

numeric_type - numeric_typenumeric_type

Вычитание

2 - 3-1

- numeric_typenumeric_type

Отрицание (унарный минус)

- (-4)4

numeric_type * numeric_typenumeric_type

Умножение

2 * 36

numeric_type / numeric_typenumeric_type

Операция деления (для целочисленных типов результат деления усекается в сторону нуля)

5.0 / 22.5000000000000000

5 / 22

(-5) / 2-2

numeric_type % numeric_typenumeric_type

Оператор вычисления остатка от деления (modulo); доступен для smallint, integer, bigint, и numeric

5 % 41

numeric ^ numericnumeric

double precision ^ double precisiondouble precision

Оператор возведения в степень

2 ^ 38

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

2 ^ 3 ^ 3512

2 ^ (3 ^ 3)134217728

|/ double precisiondouble precision

Квадратный корень

|/ 25.05

||/ double precisiondouble precision

Кубический корень

||/ 64.04

@ numeric_typenumeric_type

Абсолютное значение

@ -5.05.0

integral_type & integral_typeintegral_type

Побитовое И (AND)

91 & 1511

integral_type | integral_typeintegral_type

Побитовое ИЛИ (OR)

32 | 335

integral_type # integral_typeintegral_type

Побитовое исключающее ИЛИ (XOR)

17 # 520

~ integral_typeintegral_type

Побитовое НЕ (NOT)

~1-2

integral_type << integerintegral_type

Побитовый сдвиг влево

1 << 416

integral_type >> integerintegral_type

Побитовый сдвиг вправо

8 >> 22


Таблица 2.6.5 В таблице представлены доступные математические функции. Многие из данных функций реализованы в нескольких формах с различными типами аргументов. Если не указано иное, любая форма функции возвращает тот же тип данных, что и её аргумент или аргументы; случаи обработки различных типов данных разрешаются так же, как описано выше для операторов. Функции, работающие с double precision реализация данных в основном опирается на библиотеку C хост-системы; точность и поведение в граничных случаях могут варьироваться в зависимости от хост-системы.

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

Функция

Описание

Примеры

abs ( numeric_type ) → numeric_type

Абсолютное значение

abs(-17.4)17.4

cbrt ( double precision ) → double precision

Кубический корень

cbrt(64.0)4

ceil ( numeric ) → numeric

ceil ( double precision ) → double precision

Ближайшее целое число, большее или равное значению аргумента

ceil(42.2)43

ceil(-42.8)-42

ceiling ( numeric ) → numeric

ceiling ( double precision ) → double precision

Ближайшее целое число, большее или равное значению аргумента (аналогично функции ceil)

ceiling(95.3)96

функция degrees ( double precision ) → double precision

Преобразует радианы в градусы

degrees(0.5)28.64788975654116

div ( y numeric, x numeric ) → numeric

Целочисленное частное от деления y/x (округление в сторону нуля)

div(9, 4)2

erf ( double precision ) → double precision

Функция ошибок

erf(1.0)0.8427007929497149

erfc ( double precision ) → double precision

Дополнительная функция ошибок (1 - erf(x), без потери точности при больших значениях аргумента)

erfc(1.0)0.15729920705028513

exp ( numeric ) → numeric

exp ( double precision ) → double precision

Экспоненциальная функция (числоe в заданной степени)

exp(1.0)2.7182818284590452

факториал ( bigint ) → numeric

Факториал

factorial(5)120

floor ( numeric ) → numeric

floor ( double precision ) → double precision

Ближайшее целое число, которое меньше аргумента или равно ему

floor(42.8)42

floor(-42.8)-43

gcd ( numeric_type, numeric_type ) → numeric_type

Наибольший общий делитель (наибольшее положительное число, на которое оба входных аргумента делятся без остатка); возвращает 0 если оба аргумента равны нулю; доступно для integer, bigint, и numeric

gcd(1071, 462)21

lcm ( numeric_type, numeric_type ) → numeric_type

Наименьшее общее кратное (наименьшее строго положительное число, которое кратно обоим входным аргументам); возвращает 0 если любой из входных аргументов равен нулю; доступно для integer, bigint, и numeric

lcm(1071, 462)23562

ln ( numeric ) → numeric

ln ( double precision ) → double precision

Натуральный логарифм

ln(2.0)0.6931471805599453

log ( numeric ) → numeric

log ( double precision ) → double precision

Десятичный логарифм

log(100)2

log10 ( numeric ) → numeric

log10 ( double precision ) → double precision

Десятичный логарифм (эквивалентно функции log)

log10(1000)3

log ( b numeric, x numeric ) → numeric

Логарифм числа x по основанию b

log(2.0, 64.0)6.0000000000000000

min_scale ( numeric ) → integer

Минимальный масштаб (количество дробных десятичных знаков), необходимый для точного представления заданного значения

min_scale(8.4100)2

mod ( y numeric_type, x numeric_type ) → numeric_type

Остаток от деления y/x; доступно для smallint, integer, bigint, и numeric

mod(9, 4)1

pi ( ) → double precision

Приближенное значение π

pi()3.141592653589793

power ( a numeric, b numeric ) → numeric

power ( a double precision, b double precision ) → double precision

a возведенное в степень b

power(9, 3)729

радианы ( double precision ) → double precision

Выполняет преобразование из градусов в радианы

radians(45.0)0.7853981633974483

round ( numeric ) → numeric

round ( double precision ) → double precision

Выполняет округление до ближайшего целого числа. Для numeric, когда значения равноудалены от соседних целых чисел, округление выполняется в сторону от нуля. Для double precision, поведение при разрешении подобных неоднозначностей зависит от платформы, однако «округление до ближайшего четного» является наиболее распространенным правилом.

round(42.4)42

round ( v numeric, s integer ) → numeric

Округляет значение v до s десятичных разрядов. При одинаковом расстоянии до ближайших чисел значение округляется в большую по модулю сторону.

round(42.4382, 2)42.44

round(1234.56, -1)1230

масштаб ( numeric ) → integer

Масштаб аргумента (количество десятичных знаков в дробной части)

scale(8.4100)4

знак ( numeric ) → numeric

знак ( double precision ) → double precision

Знак аргумента (-1, 0 или +1)

sign(-8.4)-1

sqrt ( numeric ) → numeric

sqrt ( double precision ) → double precision

Квадратный корень

sqrt(2)1.4142135623730951

trim_scale ( numeric ) → numeric

Уменьшает масштаб значения (количество дробных десятичных разрядов) посредством удаления замыкающих нулей

trim_scale(8.4100)8.41

trunc ( numeric ) → numeric

trunc ( double precision ) → double precision

Округляет число до целого (в сторону нуля)

trunc(42.8)42

trunc(-42.8)-42

trunc ( v numeric, s integer ) → numeric

Усекает значение до указанного числа v до s десятичных разрядов

trunc(42.4382, 2)42.43

width_bucket ( operand numeric, low numeric, high numeric, count integer ) → integer

width_bucket ( operand double precision, low double precision, high double precision, count integer ) → integer

Возвращает номер интервала, в который operand попадает в гистограмме, имеющей count интервалов равной ширины, охватывающие диапазон от low до high. Интервалы имеют включительные нижние границы и исключительные верхние границы. Возвращает 0 для значения меньше low, или count+1 для значения больше или равного high. Если low > high, поведение зеркально отражается: теперь интервал 1 находится непосредственно ниже low, а включительные границы теперь находятся на верхней стороне.

width_bucket(5.35, 0.024, 10.06, 5)3

width_bucket(9, 10, 0, 10)2

width_bucket ( operand anycompatible, thresholds anycompatiblearray ) → integer

Возвращает номер интервала, в который operand попадает, на основании массива, содержащего нижние границы интервалов включительно. Возвращает значение 0 для входного значения, которое меньше первой нижней границы. operand при этом элементы массива могут иметь тип любого типа, снабженного стандартными операторами сравнения. Данный thresholds массив должен быть отсортирован, в порядке возрастания, иначе будут получены непредвиденные результаты.

width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[])2


Таблица 2.6.6 приведены функции для генерации случайных чисел.

Таблица 2.6.6. Функции генерации случайных чисел

Функция

Описание

Примеры

random ( ) → double precision

Возвращает случайное значение в диапазоне 0.0 <= x < 1.0

random()0.897124072839091

random ( min integer, max integer ) → integer

random ( min bigint, max bigint ) → bigint

random ( min numeric, max numeric ) → numeric

Возвращает случайное значение в диапазоне min <= x <= max. Для типа numeric, результат будет содержать такое же количество десятичных знаков после запятой, что и min или max, в зависимости от того, какое из них имеет большее количество знаков.

random(1, 10)7

random(-0.499, 0.499)0.347

random_normal ( [ среднее значение double precision [, среднеквадратическое отклонение double precision ]] ) → double precision

Возвращает случайное значение из нормального распределения с заданными параметрами; среднее значение значение по умолчанию — 0.0 и среднеквадратическое отклонение значение по умолчанию — 1.0

random_normal(0.0, 1.0)0.051285419

setseed ( double precision ) → void

Устанавливает начальное значение (seed) для последующих вызовов функций random() и random_normal() вызовы; аргумент должен находиться в диапазоне от -1.0 до 1.0 включительно

setseed(0.12345)


Функции, random() и random_normal() перечисленные в Таблица 2.6.6 используют детерминированный генератор псевдослучайных чисел. Он обладает высоким быстродействием, но не подходит для криптографических приложений; см. pgcrypto модуль для поиска более безопасной альтернативы. Если setseed() вызывается, то последовательность результатов последующих вызовов этих функций в текущем сеансе можно повторить путем повторного выполнения setseed() с тем же самым аргументом. Без предварительного setseed() вызов в рамках того же сеанса; при первом вызове любой из этих функций получается начальное значение (seed) из зависящего от платформы источника случайных битов.

Таблица 2.6.7 приведены доступные тригонометрические функции. Каждая из этих функций представлена в двух вариантах: один измеряет углы в радианах, а другой — функция degrees измеряет углы в градусах.

Таблица 2.6.7. Тригонометрические функции

Функция

Описание

Примеры

acos ( double precision ) → double precision

Арккосинус, результат в радианах

acos(1)0

acosd ( double precision ) → double precision

Арккосинус, результат возвращается в градусах

acosd(0.5)60

asin ( double precision ) → double precision

Арксинус, результат возвращается в радианах

asin(1)1.5707963267948966

asind ( double precision ) → double precision

Арксинус, результат возвращается в градусах

asind(0.5)30

atan ( double precision ) → double precision

Арктангенс, результат возвращается в радианах

atan(1)0.7853981633974483

atand ( double precision ) → double precision

Арктангенс, результат возвращается в градусах

atand(1)45

atan2 ( y double precision, x double precision ) → double precision

Арктангенс от y/x, результат в радианах

atan2(1, 0)1.5707963267948966

atan2d ( y double precision, x double precision ) → double precision

Арктангенс от y/x, результат в градусах

atan2d(1, 0)90

cos ( double precision ) → double precision

Косинус, аргумент задан в радианах

cos(0)1

cosd ( double precision ) → double precision

Косинус, аргумент задан в градусах

cosd(60)0.5

cot ( double precision ) → double precision

Котангенс, аргумент задан в радианах

cot(0.5)1.830487721712452

cotd ( double precision ) → double precision

Котангенс, аргумент задан в градусах

cotd(45)1

sin ( double precision ) → double precision

Вычисление синуса, аргумент в радианах

sin(1)0.8414709848078965

sind ( double precision ) → double precision

Вычисление синуса, аргумент в градусах

sind(30)0.5

tan ( double precision ) → double precision

Вычисление тангенса, аргумент в радианах

tan(1)1.5574077246549023

tand ( double precision ) → double precision

Вычисление тангенса, аргумент в градусах

tand(45)1


Примечание

Для работы с углами, измеряемыми в градусах, можно также использовать функции преобразования единиц измерения radians() и degrees() которые были описаны выше. Тем не менее, рекомендуется использовать специальные тригонометрические функции для градусов, поскольку это позволяет избежать ошибок округления в таких частных случаях, как sind(30).

Таблица 2.6.8 приведены доступные гиперболические функции.

Таблица 2.6.8. Гиперболические функции

Функция

Описание

Примеры

sinh ( double precision ) → double precision

Гиперболический синус

sinh(1)1.1752011936438014

cosh ( double precision ) → double precision

Гиперболический косинус

cosh(0)1

tanh ( double precision ) → double precision

Гиперболический тангенс

tanh(1)0.7615941559557649

asinh ( double precision ) → double precision

Обратный гиперболический синус

asinh(1)0.881373587019543

acosh ( double precision ) → double precision

Обратный гиперболический косинус

acosh(1)0

atanh ( double precision ) → double precision

Обратный гиперболический тангенс

atanh(0.5)0.5493061443340548


Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению