为什么使用SUM函数时sql查询会忽略小数位? iv'e使用CONVERT函数但它没有返回正确的值。
示例:
150.30 * 3 = 450.9
但是在我的函数的结果它返回
150.30 * 3 = 451它在小数点后面。
我怎样才能得到确切的计算结果......?
这是我的sql函数查询
CREATE FUNCTION [dbo].[fnGetSubjectCost](@id INT)
RETURNS DECIMAL
AS
-- Returns the stock level for the product.
BEGIN
DECLARE @ret DECIMAL;
SELECT @ret = IIF([Name] = 'Tuition', CONVERT([DECIMAL](9,2),Cost) * CONVERT([DECIMAL](15,2),t1.SubjectUnit), CONVERT([DECIMAL](9,2),Cost))
FROM [HCCDB].[dbo].[SubjectOfferedFee] AS t0
INNER JOIN HCCDB.dbo.SubjectsOffered AS t1
ON t1.SubjectsOfferedID = t0.SubjectsOfferedID
WHERE t0.SubjectOfferedFeeID = @id
IF (@ret IS NULL)
SET @ret = 0;
RETURN CONVERT(DECIMAL(15,2), @ret);
END;
查询工作但它没有返回确切的值。它忽略了小数位。
此功能的目的是添加列公式。
ALTER TABLE HCCDB.dbo.SubjectOfferedFee
ADD FinalCost AS CONVERT(DECIMAL(15,2), dbo.fnGetSubjectCost(CONVERT(INT, [SubjectOfferedFeeID])))
答案 0 :(得分:2)
问题是@ret
的声明。
在SQL Server中,小数的默认比例为0(请参阅documentation)。所以,
declare @ret decimal;
相当于:
declare @ret decimal(18, 0);
要明确精确度和规模,例如:
declare @ret decimal(18, 2);