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 и приближений
Следующий пример показывает два выражения, которые демонстрируют, используя 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)
Функция ROUND
Посчитать средний размер жесткого диска ПК. Результат представить с двумя знаками после десятичной точки.

Консоль
Выполнить
мы получим такой результат:
Чтобы выполнить требуемое округление можно воспользоваться функцией ROUND :

Консоль
Выполнить
Второй аргумент этой функции как раз указывает число десятичных знаков результата.
Как видно, результат был округлен по арифметическим правилам. Однако у функции ROUND есть третий необязательный аргумент, который говорит о том, округлять ли результат (значение 0 — принимается по умолчанию) или отбрасывать цифры сверх удерживаемых (ненулевое значение).
Т.е. если мы перепишем наш запрос так:

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

Консоль
Выполнить
Следует отметить, что функция ROUND выполняет округление, но не меняет тип результата. Т.е. если аргумент будет иметь тип dec(12,6), то и результат округления будет того же типа, а именно,
В этом легко убедиться, выполнив запрос
Поэтому, если вы хотите избавиться от хвостовых нулей, используйте преобразование к нужному вам типу, например, dec(12,2). Тогда нам и функция ROUND не потребуется. 🙂

Консоль
Выполнить
Функция 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)
Функция CEILING
Функция CEILING используется для округления дробей до целого в большую сторону.
Синтаксис
SELECT CEILING(поле) FROM имя_таблицы WHERE условие
Примеры
| id айди |
name имя |
age возраст |
salary зарплата |
|---|---|---|---|
| 1 | user1 | 23 | 100.1 |
| 2 | user2 | 24 | 200.4 |
| 3 | user3 | 25 | 300.9 |
Пример
В данном примере дробная зарплата округляется до целых в большую сторону:
SELECT *, CEILING(salary) as ceiling_salary FROM employees
Результат выполнения кода:
| id айди |
name имя |
age возраст |
salary зарплата |
ceiling_salary округленная зарплата |
|---|---|---|---|---|
| 1 | user1 | 23 | 100.1 | 101 |
| 2 | user2 | 24 | 200.4 | 201 |
| 3 | user3 | 25 | 300.9 | 301 |
Смотрите также
- функцию round ,
которая округляет дроби до нужного знака - функцию FLOOR ,
которая округляет дроби в меньшую сторону - функцию truncate ,
которая усекает числа до нужного знака