#tsql #sql-server-2005 #decimal #rounding
#tsql #sql-server-2005 #десятичная #округление
Вопрос:
Есть ли простой способ преобразовать следующую формулу Excel в TSQL:
ROUNDDOWN((table.OrderQty / table.PacksPerCase),0)
- таблица.OrderQty = 9
- таблица.PacksPerCase = 5
«0» указывает, что результат будет иметь ноль знаков после запятой
Результат = 1.0
- таблица.OrderQty = 9
- таблица.PacksPerCase = 4
«0» указывает, что результат будет иметь ноль знаков после запятой
Результат = 2.0
Ответ №1:
Попробуйте использовать FLOOR :
Функция FLOOR возвращает наибольшее целое число, меньшее или равное указанному числовому выражению.
Ваше выражение должно быть:
FLOOR(table.OrderQty / table.PacksPerCase)
Комментарии:
1. это тоже было на востоке. Спасибо!
2. О, еще один вопрос: почему выбирается 9/5 = 1, когда оно должно быть 1,8
3. @user2984486 Поскольку оба числа являются целыми числами, SQL Server использует целочисленное деление. Если вы укажете, что хотите использовать деление с плавающей запятой с помощью (например)
SELECT 9.0/5
, вы получите 1.8 .
Ответ №2:
ROUNDDOWN()
округляет до нуля отрицательные числа.
Поскольку FLOOR
округляется до отрицательной бесконечности, ближайший эквивалент в TSQL, о котором я могу думать ROUND
, имеет function
значение 1;
ROUND((table.OrderQty / table.PacksPerCase), 0, 1)
Если вы имеете дело только с положительными числами, конечно, FLOOR также будет работать хорошо.