9.3. Математические функции и операторы #
Математические операторы определены для множества типов PostgreSQL. Как работают эти операции с типами, для которых нет стандартных соглашений о математических действиях (например, с типами даты/времени), мы опишем в последующих разделах.
В Таблице 9.4 показаны математические операторы, реализованные для стандартных числовых типов. Если не отмечено обратное, операторы, принимающие числовой_тип
, работают с типами smallint
, integer
, bigint
, numeric
, real
и double precision
. Операторы, принимающие целочисленный_тип
, работают с типами smallint
, integer
и bigint
. За исключением явно отмеченных случаев, все разновидности операторов возвращают такой же тип данных, который имеет их аргумент (или их аргументы). Вызовы с неодинаковыми типами аргументов, например integer
+
numeric
, разрешаются в пользу типа, оказавшегося последним в определённых выше списках.
Таблица 9.4. Математические операторы
Оператор Описание Пример(ы) |
---|
Сложение
|
Унарный плюс (нет операции)
|
Вычитание
|
Смена знака
|
Умножение
|
Деление (при делении целочисленных типов результат округляется в направлении нуля)
|
Остаток от деления; имеется для типов
|
Возведение в степень
В отличие от принятого в математике порядка,
|
Квадратный корень
|
Кубический корень
|
Абсолютное значение
|
Битовое И
|
Битовое ИЛИ
|
Битовое исключающее ИЛИ
|
Битовое НЕ
|
Битовый сдвиг влево
|
Битовый сдвиг вправо
|
В Таблице 9.5 перечислены все существующие математические функции. Многие из этих функций имеют несколько форм с разными типами аргументов. За исключением случаев, где это указано явно, все разновидности функций возвращают тот же тип данных, который имеет их аргумент (или аргументы); вызовы с неодинаковыми типами разрешаются по тому же принципу, что был описан выше для операторов. Функции, работающие с данными double precision
, в массе своей используют реализации из системных библиотек сервера, поэтому точность и поведение в граничных случаях может зависеть от системы сервера.
Таблица 9.5. Математические функции
В Таблице 9.6 перечислены все функции для генерации случайных чисел.
Таблица 9.6. Случайные функции
Функция random()
использует детерминированный генератор псевдослучайных чисел. Она работает быстро, но не подходит для криптографических приложений; более безопасная альтернатива имеется в модуле pgcrypto. Если воспользоваться функцией setseed()
и вызывать её с одним и тем же аргументом, в текущем сеансе можно получать повторяющиеся последовательности результатов random()
. Если функция setseed()
до этого не вызывалась в текущем сеансе, при первом вызове random()
затравка будет получена из платформозависимого источника случайных чисел. Эти замечания справедливы и для random_normal()
.
В Таблице 9.7 перечислены все имеющиеся тригонометрические функции. У каждой функции имеются две вариации: одна измеряет углы в радианах, а вторая — в градусах.
Таблица 9.7. Тригонометрические функции
Примечание
Также можно работать с углами в градусах, применяя вышеупомянутые функции преобразования единиц
и radians()
. Однако предпочтительнее использовать тригонометрические функции с градусами, так как это позволяет избежать ошибок округления в особых случаях, например, при вычислении degrees()
sind(30)
.
В Таблице 9.8 перечислены все имеющиеся гиперболические операторы.
Таблица 9.8. Гиперболические функции