Функции ROUND, CEILING, FLOOR в SQL: округление и другие действия с числами
Функция SQL ROUND(результат_вычислений, n) округляет результат вычислений до n-го знака после запятой. Округление производится по правилам арифметики.
Если n — отрицательное число (−n), то округление происходит до n-го знака перед запятой. Таким образом, с помощью функции ROUND можно получить и целое число как результат округления.
Пример 1. В базе данных фирмы есть таблица Staff, содержащая данные о сотрудниках фирмы. Выведем индивидуальные размеры заработной платы сотрудников:
SELECT Name, Salary FROM 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 |
Для вычисления среднего размера заработной платы пишем запрос:
SELECT AVG (Salary) FROM STAFF
Получим следующий результат:
| AVG(Salary) |
| 16990.06662326389 |
Для отчётов результат с таким числом знаков после запятой не годится. Округлим результат до второго знака после запятой с помощью функции ROUND:
SELECT ROUND ( AVG (Salary),2) AS Avg_Salary FROM STAFF
Результат будет следующим:
| Avg_Salary |
| 16990.07 |
Пример 2. Теперь округлим результат до первого знака до запятой, применяя в функции ROUND параметр минус единица:
SELECT ROUND ( AVG (Salary),−1) AS Avg_Salary FROM STAFF
Результат будет следующим:
| Avg_Salary |
| 16990 |
Сместим округление ещё на один знак влево и применим в функции ROUND параметр минус 2:
SELECT ROUND ( AVG (Salary),−2) AS Avg_Salary FROM STAFF
Результат будет следующим:
| Avg_Salary |
| 17000 |
Функция SQL ROUND может применяться ещё и с третьим необязательными параметром (кроме MySQL). Если этим параметром будет 1, то округление производиться не будет, просто в результате будет оставлено столько знаков после запятой, сколько указано во втором параметре.
Пример 3. Оставить в результате вычислений средней заработной платы два знака после запятой, не производя округления. Применяем функцию ROUND с тремя параметрами:
SELECT ROUND ( AVG (Salary),2,1) AS Avg_Salary FROM STAFF
Результат будет следующим:
| Avg_Salary |
| 16990.06 |
Функция MySQL TRUNCATE
В MySQL аналогом разновидности функции ROUND без округления результата является функция TRUNCATE. Она, как и ROUND в общем случае имеет два параметра: результат вычислений и число знаков после запятой.
Пример 4. Условие то же, что в примере 3, но в MySQL. Применяем функцию TRUNCATE:
SELECT TRUNCATE ( AVG (Salary),2) AS Avg_Salary FROM STAFF
Получим результат без округления, как в предыдущем примере:
| 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 Server функция ROUND
В SQL Server (Transact-SQL) функция ROUND возвращает число, округленное до определенного количества десятичных знаков.
Синтаксис
Синтаксис функции ROUND в SQL Server (Transact-SQL):
ROUND( number, decimal_places [, operation ] )
Параметры или аргументы
number – число которое округляем.
decimal_places — число десятичных знаков округления. Это значение должно быть положительным или отрицательным целым числом. Если этот параметр опущен, функция ROUND будет округлять число до 0 знаков после запятой.
operation — необязательный. operation может быть либо 0, либо любое другое числовое значение. Когда оно равно 0 (или этот параметр опущен), функция ROUND будет округлять результат до числа decimal_places . Если operation представляет собой любое значение, отличное от 0, функция ROUND усекает результат до числа decimal_places .
Примечание
См. Также функции CEILING И FLOOR.
Применение
Функция ROUND может использоваться в следующих версиях SQL Server (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005
Пример
Рассмотрим некоторые примеры SQL Server функции ROUND, чтобы понять, как использовать функцию ROUND в SQL Server (Transact-SQL). Например:
Функция SQL ROUND()
Оператор SQL ROUND() — функция для округления десятичных чисел. Работает только с числовыми столбцами или произвольными вещественными числами.
Функция SQL ROUND() имеет следующий синтаксис:
ROUND(expression, length)
expression — название столбца или столбцов, а так же вещественное число.
length — указывает точность округления для числа.
Примеры оператора SQL ROUND. Имеется следующая таблица Planets :
| ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
| 1 | Mars | 3396 | 687.58 | 1659 | No | Christiaan Huygens |
| 2 | Saturn | 60268 | 10759.22 | — | Yes | — |
| 3 | Neptune | 24764 | 60190.91 | 1846 | Yes | John Couch Adams |
| 4 | Mercury | 2439 | 115.88 | 1631 | No | Nicolaus Copernicus |
| 5 | Venus | 6051 | 243.56 | 1610 | No | Galileo Galilei |
Пример 1. Используя оператор SQL ROUND округлить столбец SunSeason с точностью до одного знака после запятой:
SELECT ROUND(SunSeason, 1) FROM Planets
| SunSeason |
| 687.5 |
| 10759.2 |
| 60190.9 |
| 115.8 |
| 243.5 |
Пример 2. Округлить значение числа с использованием оператора SQL ROUND.
Функция SQL ROUND() может принимать в качестве первого аргумента любое вещественное число:
SELECT ROUND(43532.8123, 3)
ROUND ФУНКЦИЯ (ДЛЯ ЧИСЕЛ)
Oracle/PLSQL функция ROUND возвращает число, округленное до определенного количества знаков после запятой.
Синтаксис
Синтаксис Oracle/PLSQL функции ROUND (для чисел):
ROUND( number, [ decimal_places ] )
Параметры или аргументы
number число для округления.
decimal_places количество десятичных знаков округления. Это значение должно быть целым числом. Если этот параметр не указан, ROUND функция будет округлять число до ближайшего целого.
Функция ROUND (применительно к числам) возвращает numeric значение.
Применение
Функцию ROUND можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i
Пример
Рассмотрим несколько примеров функции ROUND и изучим, как использовать функцию ROUND в Oracle/PLSQL.
