Функция SQL Round не работает, есть идеи? - PullRequest
3 голосов
/ 17 июня 2009

Вот оператор SELECT:

SELECT ROUND(ISNULL(SUM(Price),0),2) As TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

Есть идеи, почему не округлять до двух десятичных знаков?

Ответы [ 3 ]

8 голосов
/ 17 июня 2009

вместо ROUND(ISNULL(SUM(Price),0),2) вы можете попробовать CAST(ISNULL(SUM(PRICE),0) AS DECIMAL (4,2))

2 голосов
/ 17 июня 2009

Что такое тип данных Price?

КРУГЛЫЙ в БОЛ

SELECT ROUND(123.4545, 2); -- = 123.4500
GO
SELECT ROUND(123.45, -2);  -- = 100,00
GO

Основной тип данных остается прежним: вы просто округляете, но оставляете конечные нули.

Для 2 десятичных разрядов вывод , вам нужно сделать CAST до десятичного (x, 2)

1 голос
/ 17 июня 2009

Возможно, у вас возникли проблемы с сортировкой столбца в вашей среде. Можно попробовать явное приведение CAST (ROUND (...) AS NUMERIC (18,4)) или даже просто попытаться сделать 0 0.0. Также убедитесь, что вы связываете столбец с правильным типом данных в вашем приложении.

Все крутые люди используют COALESCE вместо ISNULL. COALESCE является портативным, и вы можете иметь столько параметров, сколько захотите (не только два !!)

В любом случае, я не уверен, что это был просто пример, но у вас могут возникнуть проблемы с DA в ваших данных, если они еще не были округлены на данном этапе.

...