Математические функции в SQL (модуль числа, округление, возведение в степень, вычисление корня и другие функции)
Здравствуйте, уважаемые читатели блога webcodius.ru. Сегодня продолжим изучение баз данных, а именно пройдемся по математическим функциям языка sql. Использование математических функций sql поможет перенести часть логики приложения с web-сервера на сервер базы данных, тем самым разгрузив web-сервер на который обычно ложится основная нагрузка.
Сразу отмечу, что в случае ошибки все математические функции возвращают NULL. Итак, перейдем к делу.
Знаки числа
Начнем с функции ABS (x), которая возвращает абсолютное значение переданного ей числа x. Пример:
SELECT ABS (-5)
Результат: 5
SELECT ABS (5)
Результат: 5
Знак числа можно определить с помощью функции SIGN (x) . Функция возвращает -1 если x отрицательное число, 1 если положительное и 0 если x является нулем. Пример:
SELECT SIGN (-5)
Результат: -1
SELECT SIGN (0)
Результат: 0
SELECT SIGN (5)
Результат: 1
Округление чисел
Начнем с функции FLOOR (x). Возвращает ближайшее целое число не превышающее x. Пример:
SELECT FLOOR (5.5)
Результат: 5
SELECT FLOOR (5.2)
Результат: 5
SELECT FLOOR (5.7)
Результат: 5
SELECT FLOOR (5)
Результат: 5
SELECT FLOOR (-5.2)
Результат: -6
Как видно, при задании любого положительного дробного числа от 5 до 6 возвращается целое число 5. А при передаче параметра -5.2 вернется -6, так как -6 меньше -5.2.
Обратное действие выполняет функция CEILING (x) . Она возвращает ближайшее целое число, которое превышает переданный параметр x. Пример:
SELECT CEILING (5.5)
Результат: 6
SELECT CEILING (5.2);
Результат: 6
SELECT CEILING (5.7)
Результат: 6
SELECT CEILING (5)
Результат: 5
SELECT CEILING (-5.5)
Результат: -5
Для округления дробного числа до ближайшего целого используется функция ROUND (x, d). Функция может принимать один или два параметра. Первый параметр x — число, которое необходимо округлить. Второй параметр d — целое число, определяющее разряд до которого необходимо округлить x. В случае если передан один параметр x, то происходит просто округление до ближайшего целого. Например:
SELECT ROUND (50.45)
Результат: 50
SELECT ROUND (50.76)
Результат: 51
При значении аргумента, равного середине между двумя целыми числами, результат будет зависеть от конкретной СУБД, где используется язык SQL.
Если в функцию передан второй параметр, то после запятой останется столько знаков сколько указано в параметре. Например, если после запятой необходимо оставить один символ, то в качестве второго параметра указываем цифру 1:
SELECT ROUND (50.76, 1)
Результат: 50,8
Существует возможность округлять число до любого разряда до запятой, для этого просто вторым параметром указываем отрицательное число. Например:
SELECT ROUND (251.55, -1)
Результат: 250
В SQL еще имеется функция, которая не округляет, а отсекает десятичную часть дробного числа. Функция TRUNCATE (x, y) возвращает число x, усеченное до y десятичных знаков:
SELECT TRUNCATE (1.999, 1)
SELECT TRUNCATE (1.999, 0)
Функции выполняющие сложные математические операции
Начнем с самого простого. Функция MOD (x, y) возвращает остаток от деления x на y. Например:
SELECT MOD (10, 3)
Результат: 1
Следующая функция EXP (x), которая возвращает значение e (Число Эйлера) возведенное в степень x. Или научным языком, возвращает экспоненту числа. Пример:
SELECT EXP (3)
Результат: 20.085536923187668
Далее рассмотрим функцию LOG (x), которая возвращает натуральный логарифм числа x. Пример:
SELECT LOG (10)
Результат: 2.302585092994046
Для получения логарифма числа x, для произвольной основы логарифма y можно пользоваться формулой LOG (x)/LOG (y). Например:
SELECT LOG (8)/LOG (2)
Результат: 3
Для получения десятичного логарифма числа x существует функция LOG10 (x). Пример:
SELECT LOG10 (100)
Результат: 2
Для возведения в степень в языке SQL есть целых две функции: POW (x, y) и POWER (x, y). Возвращают число x возведенное в степень y. Пример:
SELECT POW (2, 3)
Результат: 8
SELECT POWER (3, 2)
Результат: 9
А функция SQRT (x) вычисляет квадратный корень числа x. Пример:
SELECT SQRT (16)
Результат: 4
Чтобы использовать в своих вычисления число «пи» в SQL есть функция PI (), которая возвращает значение этого числа:
SELECT PI ()
Результат: 3.141593
Тригонометрические функции в языке SQL
Кратенько пройдемся по тригонометрическим функциям:
- COS (x) — косинус угла x;
- SIN (x) — синус угла x;
- TAN (x) — тангенс угла x;
- COT (x) — котангенс угла x.
Везде x задается в радианах. Примеры:
SELECT COS (PI ())
Результат: -1
SELECT SIN (PI ()/2)
Результат: 1
SELECT TAN (PI ()/4)
Результат: 1
SELECT COT (PI ()/3)
Результат: 0.577350269189626
Функции ACOS (x) и ASIN (x) вычисляют соответственно арккосинус и арксинус числа x, т.е. функции возвращают величину, косинус или синус которой равен x. При этом если значение x не находится в диапазоне от -1 до 1, то функции возвращают NULL. Например:
SELECT ASIN (-1)
Результат: -1.5707963267949
SELECT ACOS (-1)
Результат: 3.14159265358979
SELECT ACOS (1.1)
Результат: NULL
Функция ATAN (x) вычисляет арктангенс числа x, т.е. возвращает величину, тангенс которой равен x. Пример:
SELECT ATAN (3);
Результат: 1.24904577239825
Для преобразования радиан в градусы и обратно используются функции DEGREES (x) и RADIANS (x) соответственно:
SELECT DEGREES (PI ())
Результат: 180
SELECT RADIANS (180)
Результат: 3.14
Случайные числа
Функция RAND (x) генерирует случайное значение в диапазоне от 0 до 1. Если указан аргумент x, то он используется как начальное значение этой величины. Пример:
SELECT RAND ();
Результат:0.472241415009636
SELECT RAND (0.5);
Результат: 0.943597390424144
На этом все. Вроде рассмотрел все часто используемые в SQL математические функции. Возможно вам будет интересно узнать и о функциях обработки строк в SQL.
Функции ROUND, CEILING, FLOOR в SQL: округление и другие действия с дробными числами
Функция SQL ROUND(результат_вычислений, n) округляет результат вычислений до n-го знака после запятой. Округление производится по правилам арифметики.
Если n — отрицательное число (−n), то округление происходит до n-го знака перед запятой. Таким образом, с помощью функции ROUND можно получить и целое число как результат округления.
Пример 1. В базе данных фирмы есть таблица Staff, содержащая данные о сотрудниках фирмы. Выведем индивидуальные размеры заработной платы сотрудников:
Результатом выполнения запроса будет следующая таблица:
Name | Salary |
Sanders | 18357.5 |
Pernal | 15430.0 |
Marenghi | 17506.8 |
Doctor | 12322.8 |
Factor | 16228.7 |
Junkers | 16232.8 |
Moonlight | 21500.6 |
Aisen | 19540.7 |
MacGregor | 15790.8 |
Для вычисления среднего размера заработной платы пишем запрос:
Получим следующий результат:
AVG(Salary) |
16990.06662326389 |
Для отчётов результат с таким числом знаков после запятой не годится. Округлим результат до второго знака после запятой с помощью функции ROUND:
Результат будет следующим:
Avg_Salary |
16990.07 |
Пример 2. Теперь округлим результат до первого знака до запятой, применяя в функции ROUND параметр минус единица:
Результат будет следующим:
Avg_Salary |
16990 |
Сместим округление ещё на один знак влево и применим в функции ROUND параметр минус 2:
Результат будет следующим:
Avg_Salary |
17000 |
Функция SQL ROUND может применяться ещё и с третьим необязательными параметром (кроме MySQL). Если этим параметром будет 1, то округление производиться не будет, просто в результате будет оставлено столько знаков после запятой, сколько указано во втором параметре.
Пример 3. Оставить в результате вычислений средней заработной платы два знака после запятой, не производя округления. Применяем функцию ROUND с тремя параметрами:
Результат будет следующим:
Avg_Salary |
16990.06 |
Функция MySQL TRUNCATE
В MySQL аналогом разновидности функции ROUND без округления результата является функция TRUNCATE. Она, как и ROUND в общем случае имеет два параметра: результат вычислений и число знаков после запятой.
Пример 4. Условие то же, что в примере 3, но в MySQL. Применяем функцию TRUNCATE:
Получим результат без округления, как в предыдущем примере:
Avg_Salary |
16990.06 |
Функция SQL CEILING
Функция SQL CEILING не производит округления. Она просто принимает дробное число и возвращает максимальное целое число, не меньшее принятого. Приведём примеры действия функции с различными принятыми дробными числами.
Функция с аргументом | Возвращаемое значение |
CEILING(0.38) | 1 |
CEILING(1.63) | 2 |
CEILING(−0.38) | 0 |
CEILING(−1.63) | −1 |
В случае функции CEILING некорректно говорить об округлении, поскольку она преобразует числа без учёта правил арифметики.
Функция SQL FLOOR
Функция FLOOR также не производит округления. Её действие противоположно действию функции CEILING. Она принимает дробное число и возвращает максимальное целое число, не большее принятого. Приведём примеры действия функции с различными принятыми дробными числами.
Функция с аргументом | Возвращаемое значение |
FLOOR(0.38) | 0 |
FLOOR(1.63) | 1 |
FLOOR(−0.38) | −1 |
FLOOR(−1.63) | −2 |
Функция FLOOR, как и функция CEILING, преобразует числа без учёта правил арифметики.
Округление числа в большую строну в sql
Подскажите, как округлить число в большую сторону? Существует ли в sql функция, аналогичная функции из C# Math.Round(value, MidpointRounding.AwayFromZero);
Т.е. если я имею 7.5 , я должен получить 8 , но если имею 7.4 , то должен получит 7 .
В Access можно сделать так:
select round(7.5, 0) from dual
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# sql или задайте свой вопрос.
дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.7.41110
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как округлить число до десяти знаков после запятой в sql-сервере
У меня есть столбец в таблице, который я хочу округлить до десятичных знаков. Который хранится в другой таблице.
Фактически мои данные хранятся как 8 знаков после запятой, но, основываясь на предпочтениях пользователя, мне нужно показать это десятичное место.
Тип данных столбца является числовым (19,8)
У меня есть процедура, которая возвращает все строки. Так что в то время я только хочу округлить свой столбец до указанного десятичного десятичного знака