CEILING: примеры (SQL)
CEILING(numeric_expression): Same as inputОписание функции CEILING в MS SQL
Функция CEILING в Microsoft SQL Server выполняет математическое округление числа в большую сторону до ближайшего целого значения, которое больше или равно исходному числу. Эта функция относится к категории математических функций и часто используется в финансовых расчетах, аналитике данных и бизнес-логике, где требуется исключить округление в меньшую сторону.
Синтаксис функции: CEILING ( numeric_expression )
Функция принимает один обязательный аргумент:
- numeric_expression – выражение числового типа. Допустимы точные или приблизительные числовые типы данных, за исключением типа
bit. Поддерживаемые типы:tinyint,smallint,int,bigint,decimal,numeric,money,smallmoney,float,real.
Возвращаемое значение имеет тот же тип данных, что и входной аргумент numeric_expression, за исключением случаев:
- Для входных типов
tinyint,smallintиintвозвращаемое значение имеет типint. - Для входных типов
moneyиsmallmoneyвозвращаемое значение имеет типmoney. - Для входных типов с указанием масштаба и точности (
decimal,numeric) возвращаемое значение имеет тот же масштаб, но может измениться точность.
Особенности работы: если аргумент имеет значение NULL, функция возвращает NULL. Для положительных чисел округление всегда происходит в большую сторону, для отрицательных – к меньшему по модулю (так как это движение к нулю).
Примеры использования CEILING
Базовые примеры с разными типами чисел:
SELECT CEILING(12.34) AS Example1;Example1 ----------- 13
SELECT CEILING(-12.34) AS Example2;Example2 ----------- -12
SELECT CEILING(0.0) AS Example3;Example3 ----------- 0
Использование с разными типами данных:
SELECT CEILING($15.79) AS MoneyExample;MoneyExample ---------------- 16.00
SELECT CEILING(CAST(7.2 AS float)) AS FloatExample;FloatExample ------------ 8
Похожие функции в MS SQL
В MS SQL Server существуют другие функции округления, которые решают схожие задачи:
- FLOOR – округляет число в меньшую сторону до ближайшего целого. Пример:
FLOOR(12.78)вернет 12. - ROUND – выполняет округление до указанной точности с возможностью выбора типа округления. Имеет дополнительный параметр для указания количества знаков после запятой и функции округления/усечения.
- TRUNCATE – отсутствует в MS SQL, но может быть эмулирована через CAST или математические операции для отбрасывания дробной части.
Функция CEILING предпочтительнее, когда необходимо гарантированно получить значение не меньше исходного, например, при расчете количества страниц для пагинации или количества упаковок товара. FLOOR используется для обратных случаев, а ROUND – для стандартного математического округления.
Типичные ошибки при использовании
Наиболее частые ошибки связаны с непониманием логики округления отрицательных чисел и типами данных.
Ожидание округления отрицательных чисел по модулю:
-- Неправильное понимание: ожидание -13
SELECT CEILING(-12.34) AS Result;Result ----------- -12
Передача нечислового аргумента вызывает ошибку:
SELECT CEILING('text') AS Result;Сообщение об ошибке: Ошибка преобразования значения varchar 'text' в тип данных int.
Особенности округления decimal типов с высокой точностью:
SELECT CEILING(CAST(12.0000000001 AS decimal(10,9))) AS Result;Result ----------- 13
Изменения в последних версиях
Функция CEILING не претерпела существенных изменений в последних версиях MS SQL Server. Основные принципы работы остаются неизменными с ранних версий. В SQL Server 2012 и более новых версиях улучшена общая производительность математических функций, но синтаксис и поведение функции CEILING сохраняются.
Важное уточнение: начиная с SQL Server 2016, улучшена обработка больших значений decimal и numeric при выполнении математических операций, что может незначительно повлиять на производительность CEILING с такими типами данных в сторону оптимизации.
Расширенные примеры применения
Расчет количества страниц для постраничного вывода:
DECLARE @TotalItems INT = 105, @PageSize INT = 10;
SELECT CEILING(@TotalItems * 1.0 / @PageSize) AS PagesRequired;PagesRequired -------------- 11
Округление денежных сумм до целых единиц в большую сторону:
SELECT Amount, CEILING(Amount) AS RoundedUp
FROM (VALUES (15.01), (15.99), (0.0), (-5.5)) AS T(Amount);Amount RoundedUp -------- ---------- 15.01 16.00 15.99 16.00 0.00 0.00 -5.50 -5.00
Использование в оконных функциях для группировки по диапазонам:
SELECT Value, CEILING(Value/10.0) * 10 AS RangeEnd
FROM (VALUES (12), (25), (38), (4)) AS T(Value);Value RangeEnd ------ --------- 12 20 25 30 38 40 4 10
Обработка NULL значений в сочетании с COALESCE:
SELECT CEILING(COALESCE(NULL, 15.75)) AS Result;Result ----------- 16
Комбинирование с другими математическими функциями:
SELECT LOG(CEILING(EXP(2))) AS ComplexCalc;ComplexCalc ----------- 3
Аналоги функции в других СУБД и языках
Функции округления в большую сторону существуют практически во всех СУБД, но с некоторыми отличиями:
MySQL: Функция CEIL() – синоним CEILING(). Пример: SELECT CEIL(12.34); вернет 13.
Oracle: Функция CEIL(). Отличие – всегда возвращает целочисленное значение типа NUMBER. Пример: SELECT CEIL(12.34) FROM dual; вернет 13.
PostgreSQL: Функция CEIL() или CEILING(). Возвращает тип numeric или double precision в зависимости от входного типа. Пример: SELECT CEILING(-12.34); вернет -12.
SQLite: Функция ceil(). Важная особенность – возвращает вещественное число. Пример: SELECT ceil(12.34); вернет 13.0.
Python: Функция math.ceil() из модуля math. Всегда возвращает целое число типа int. Пример: import math; math.ceil(12.34) вернет 13.
JavaScript: Метод Math.ceil(). Пример: Math.ceil(12.34) вернет 13.