繁体   English   中英

SQL-平均范围中的精确十进制值

[英]SQL - exact decimal value from averaging a range

我尝试阅读以前提出的问题,并尝试其他解决方案,但似乎无法弄清楚。 我仍在学习,因此非常感谢任何提示和指导。

这是我的查询

select  AVG(DATEDIFF(DAY, xx, yy)) AS DayDiff

FROM database1.dbo.table1

where month(datecompleted) = month(dateadd(month,-1,current_timestamp))
       and year(datecompleted) = year(dateadd(month,-1,current_timestamp))
       and ApprovalRequiredFrom = 'GRM'

结果sql给我的值为9,但当我在excel中求平均值时,它为9.18。 我需要sql给我2个小数位。 我尝试使用“ cast”,但无法弄清楚正确的语法。

谢谢

SQL Server进行十进制除法,即使是取平均值。 我只是乘以1.0作为快速解决方案:

select  AVG(1.0 * DATEDIFF(DAY, xx, yy)) AS DayDiff

DATEDIFF函数返回整数( INT )值。 平均( AVG )返回与包含在其中的表达式相同的数据类型。 整数值之间的操作(在SQL Server中)返回整数值。 但是,在整数和其他数值(如float或小数)之间进行运算将返回最后一个。

因此,如果将DATEDIFF转换为返回十进制,则结果将为十进制。

SELECT AVG(CONVERT(DECIMAL(8,2), DATEDIFF(DAY, xx, yy))) AS DayDiff

遵循相同的规则,硬编码的值1.0表示十进制,因此将任何整数值与1.0相乘会得到相同的值,但具有十进制数据类型。

SELECT  AVG(DATEDIFF(DAY, xx, yy) * 1.0) AS DayDiff

如Jeroen所述,转换参数将产生一个十进制平均值,但具有两个以上的小数位数。 您将不得不在最后转换平均结果。

SELECT  
    CONVERT(DECIMAL(8,2), 
        AVG(DATEDIFF(DAY, xx, yy) * 1.0)) AS DayDiff

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM