Как в sql округлить значение
Для работы с числовыми данными T-SQL предоставляет ряд функций:
ROUND : округляет число. В качестве первого параметра передается число. Второй параметр указывает на длину. Если длина представляет положительное число, то оно указывает, до какой цифры после запятой идет округление. Если длина представляет отрицательное число, то оно указывает, до какой цифры с конца числа до запятой идет округление
ISNUMERIC : определяет, является ли значение числом. В качестве параметра функция принимает выражение. Если выражение является числом, то функция возвращает 1. Если не является, то возвращается 0.
ABS : возвращает абсолютное значение числа.
CEILING : возвращает наименьшее целое число, которое больше или равно текущему значению.
FLOOR : возвращает наибольшее целое число, которое меньше или равно текущему значению.
SQUARE : возводит число в квадрат.
SQRT : получает квадратный корень числа.
RAND : генерирует случайное число с плавающей точкой в диапазоне от 0 до 1.
ROUND (Transact-SQL)
Возвращает числовое значение, округленное до указанной длины или точности.
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
numeric_expression
Выражение категории точного числового или приблизительного числового типа данных, за исключением типа данных bit.
length
Точность, с которой должно быть округлено значение numeric_expression. Аргумент length должен быть выражением типа tinyint, smallint или int. Если аргумент length является положительным числом, значение numeric_expression округляется до числа десятичных разрядов, указанных в аргументе length. Если аргумент length является отрицательным числом, значение numeric_expression округляется слева от десятичной запятой, как указано в аргументе length.
function
Тип выполняемой операции. Аргумент function должен иметь тип tinyint, smallint или int. Если аргумент function не указан или имеет значение 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 |
Remarks
Функция ROUND всегда возвращает значение. Если аргумент length имеет отрицательное значение и больше числа знаков перед десятичной запятой, ROUND возвращает 0.
| Пример | Результат |
|---|---|
| ROUND(748,58, -4) | 0 |
Функция ROUND возвращает округленное значение выражения numeric_expression независимо от типа данных, когда length является отрицательным числом.
Примеры
A. Использование функции ROUND и приближений
Следующий пример показывает два выражения, которые демонстрируют, используя ROUND , что последний знак всегда является приближением.
Б. Использование функции ROUND и округляющих аппроксимаций
В следующем примере показаны округление и аппроксимация.
В. Использование функции ROUND для усечения
В следующем примере используются две инструкции SELECT для демонстрации различия между округлением и усечением. Первая инструкция округляет результат. Вторая инструкция усекает результат.
Функции 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, преобразует числа без учёта правил арифметики.