在SQL中转换

时间:2014-04-14 09:29:28

标签: sql-server tsql

这段代码有什么作用?

SUM(CONVERT(DECIMAL(12,2),
    CONVERT(DECIMAL(12,2),
    DATEDIFF(mi,ThisTimeLastYear,TimeToday))/60))

我理解查询正在做什么,但为什么我必须使用Convert Decimal两次才能使语句有效?我得到了查询以产生我想要的结果但只是想知道为什么在获得所需结果之前尝试了它。

1 个答案:

答案 0 :(得分:0)

因为没有两个转换,您首先执行DATEDIFF_result/60作为整数除法,然后将其转换为小数。

还有其他方法可以强制在整数之间进行除法。最简单的是:

SUM(CONVERT(DECIMAL(12,2),
    DATEDIFF(mi,ThisTimeLastYear,TimeToday)/60.0))

但是,由于SUM()的返回类型始终定义为DECIMAL(38,s),如果您确实需要控制数据类型,则可能应该只是:

CONVERT(DECIMAL(12,2),SUM(
    DATEDIFF(mi,ThisTimeLastYear,TimeToday)/60.0))