ROUND (Transact-SQL)
Возвращает числовое значение, округленное до указанной длины или точности.
Синтаксис
ROUND ( numeric_expression , length [ ,function ] )
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
numeric_expression
Выражение точной числовой или приблизительной категории типов данных.
length
Точность, с которой должно быть округлено значение numeric_expression. длина должна быть выражением типа tinyint, smallint или int. Если длина является положительным числом, numeric_expression округляется до числа десятичных позиций, указанных по длине. Если аргумент length является отрицательным числом, значение numeric_expression округляется слева от десятичной запятой, как указано в аргументе length.
function
Тип выполняемой операции. функция должна быть крошечной, маленькой или int. Если функция опущена или имеет значение 0 (по умолчанию), numeric_expression округляется. Когда указывается значение, не равное 0, значение numeric_expression усекается.
Типы возвращаемых данных
Возвращает следующие типы данных.
| Результат выражения | Возвращаемый тип |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Категория decimal и numeric (p, s) | decimal(p, s) |
| Категории money и smallmoney | money |
| Категории float и real | float |
Замечания
Функция ROUND всегда возвращает значение. Если аргумент length имеет отрицательное значение и больше числа знаков перед десятичной запятой, ROUND возвращает 0.
| Пример | Результат |
|---|---|
| ROUND(748,58, -4) | 0 |
Функция ROUND возвращает округленное значение выражения numeric_expression независимо от типа данных, когда length является отрицательным числом.
| Примеры | Результат |
|---|---|
| ROUND(748,58, -1) | 750,00 |
| ROUND(748,58, -2) | 700.00 |
| ROUND(748.58, -3) | В результате возникает арифметическое переполнение, так как для значения 748,58 по умолчанию используется тип decimal (5,2), который не позволяет вернуть значение 1000. |
| Чтобы округлить результат до четырех цифр, измените тип данных на входе. Например: |
Примеры
А. Использование функции ROUND и приближений
Следующий пример показывает два выражения, которые демонстрируют, используя ROUND , что последний знак всегда является приближением.
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3); GO
----------- ----------- 123.9990 124.0000
B. Использование функции ROUND и округляющих аппроксимаций
В следующем примере показаны округление и аппроксимация.
SELECT ROUND(123.4545, 2), ROUND(123.45, -2);
---------- ---------- 123.4500 100.00
C. Использование функции ROUND для усечения
В следующем примере используются две инструкции SELECT для демонстрации различия между округлением и усечением. Первая инструкция округляет результат. Вторая инструкция усекает результат.
SELECT ROUND(150.75, 0); GO SELECT ROUND(150.75, 0, 1); GO
-------- 151.00 (1 row(s) affected) -------- 150.00 (1 row(s) affected)
Функция 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, 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 и его процедурное расширение PL/SQL от компании Oracle.

Главная › Базы данных › MySQL › Математические функции › Округление чисел в SQL, математическая функция ROUND()
Округление чисел в SQL, математическая функция ROUND()
Функция ROUND() в SQL отвечает за округление до ближайшего целого числа.
Синтаксис ROUND()
SELECT ROUND(поле1) FROM имя_таблицы WHERE условие_для_выборки;
Примеры запросов

1. Выполните округление числа 13,7
SELECT ROUND(13.7);
2. Выполните округление заработной платы сотрудника с идентификатором 2, до двух знаков после точки
SELECT ROUND(salary, 2) FROM workers WHERE >3. Округлите заработную плату Василия Петрова до целого числа
SELECT ROUND(salary, 0) FROM workers WHERE first_name = 'Василий' AND last_name = 'Петров';
Записи по теме
- Логарифм в SQL, математическая функция LOG()
- Экспонента в SQL, математическая функция EXP()
- Логарифм по основанию 10, математическая функция LOG10() в SQL
- Возведение числа в степень, математическая функция POWER() в SQL
- Модуль числа в SQL, математическая функция ABS()
- Деление по модулю в SQL, математическая функция MOD()
- Квадратный корень числа в SQL, математическая функция SQRT()