如何安全地转换以下内容:
ISNULL(t1.UserPercentage,0) AS UserPercentage
当前t1.UserPecentage列是小数(9,2),我想将其转换为整数。
由于该值可以为NULL,因此应根据对ISNULL的调用结果进行转换吗?
答案 0 :(得分:2)
DECLARE @Var DECIMAL(9,2) = 2.67
SELECT CAST(ROUND(@Var,0) AS INT)
此查询将保留空值但是如果要将NULLS转换为0
THEN
SELECT CAST(ROUND(ISNULL(@Var, 0),0) AS INT)
注意强>
将DECIMAL转换为int而不使用ROUND,它会减少一些 如果你在将其转换为零之前将其圆整为零,那么结果是准确的 INT。
直接转换为INT只会截断任何小数,但是如果 你把它变成零第一个然后CAST作为int,它会给你更多 现实的结果。
示例强>
DECLARE @Var DECIMAL(9,2) = 2.67
SELECT CAST(@Var AS INT)
这将返回2,但基本的数学规则表示如果将其四舍五入为整数,则该值为3。
DECLARE @Var DECIMAL(9,2) = 2.67
SELECT CAST(ROUND(@Var,0) AS INT)
此查询将返回3.更准确,然后将其转换为INT。
答案 1 :(得分:1)
如果您想要的结果是小数点的简单截断,使用FLOOR是您的最佳选择。乍一看,对于其他人来说,你要做的事情会更明显。
ISNULL(FLOOR(t1.UserPercentage), 0) AS UserPercentage
示例:
SELECT FLOOR(1.1), FLOOR(1.9)
-- Result is a simple truncation of the decimal points. (=1)
答案 2 :(得分:0)
declare @val decimal(9,2) =43.44
select convert(int, @val)
或
select cast(@val as int)