Sql server 平均时间&;以指定格式显示(Coldfusion)
编辑:多亏了barnyr,我得到了以秒为单位的平均值,所以现在我只需要将其转换为正确的格式。不幸的是,Peter提到的Coldfusion函数只接受一个datetime对象,所以我又被转换难倒了 我有一个双重问题。我需要生成Y个用户完成一项任务所花费的平均时间,然后以特定格式显示结果:x年x月x周x天x小时x分x秒 我的后端数据库是SQLServer2008,我正在通过Coldfusion 10运行查询。这两列都是日期时间字段 查询是(类似于): 然后我需要迭代查询结果,获得完成日期和开始日期之间的差异(即持续时间),平均结果,并如上所述显示 从Stackoverflow上的另一个线程中,我得到了以下代码,但它只适用于所需格式的天/小时/分钟/秒部分Sql server 平均时间&;以指定格式显示(Coldfusion),sql-server,coldfusion,date-format,datediff,Sql Server,Coldfusion,Date Format,Datediff,编辑:多亏了barnyr,我得到了以秒为单位的平均值,所以现在我只需要将其转换为正确的格式。不幸的是,Peter提到的Coldfusion函数只接受一个datetime对象,所以我又被转换难倒了 我有一个双重问题。我需要生成Y个用户完成一项任务所花费的平均时间,然后以特定格式显示结果:x年x月x周x天x小时x分x秒 我的后端数据库是SQLServer2008,我正在通过Coldfusion 10运行查询。这两列都是日期时间字段 查询是(类似于): 然后我需要迭代查询结果,获得完成日期和开始日期之
<cfloop query="complete_time">
<cfset completed = ParseDateTime(complete_time.Completed_Date) />
<cfset started = ParseDateTime(complete_time.Started_Date) />
<cfset difference = (completed - started) />
<cfset fixed_diff = Fix(difference) />
<cfset days = fixed_diff />
<cfset hours = TimeFormat(difference, "H") />
<cfset minutes = TimeFormat(difference, "m") />
<cfset seconds = TimeFormat(difference, "s")/ >
</cfloop>
我需要知道如何/在哪里进行平均,以及如何获得我所需格式的年/月/周值。约会数学绝对不是我最好的科目!谢谢。我建议使用sql server中的
datediff
函数获取秒数。然后在ColdFusion中,您不使用时间格式,而是使用数学Timeformat()
获取datetime对象并返回字符串 如果您可能的话,我会在数据库中做这项工作:
SELECT Started_Date,
Completed_Date,
DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff
FROM tbl_progress
然后可以在ColdFusion中将秒计算为分钟、小时等
在处理结果时,您可以将sec_diff
值相加。然后将它们除以结果集中的行数
您还可以对查询中的结果求平均值。t看一下SQL的AVG()
函数
我不在SQL server附近,但您可以使用以下功能:
SELECT Started_Date,
Completed_Date,
DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff,
AVG(DATEDIFF(Second, Started_Date, Completed_Date)) AS average_task_time
FROM tbl_progress
而不是时间格式,do和etc(或者可能需要是
年(完成)-年(开始)
或其他)非常有趣。看起来是年(完成)-年(开始)给出了正确的结果(或者至少结果与我最初的计算相符。谢谢Peter。你看过CFLIB.org了吗?这通常是我在ColdFusion缺少我需要的函数时的第一站。比如,它以秒数作为输入参数,并返回分解后的时间:4d 12h 30s。将其扩展到年、月应该不会太困难,等等。还有一个类似的问题。不过,问题是:年和月并不总是需要相同的天数。你打算如何解决这个问题?谢谢,艾尔,我会看看CFLib。理想情况下,解决方案会自动处理一年/月的天数。我假设Peter提到的Coldfusion函数我也想在SQL中做这项工作,但现在我想知道如何将您的回答与Peter对我问题的评论中的功能结合起来。这样就没有复杂的数学问题需要解决,而且可能会出错:)我编辑了您的答案,以提供以秒为单位返回平均值的有效SQL查询。我想以某种方式将其转换回日期,以便我可以使用Peter提供的Coldfusion函数,但我不太确定这将如何工作。感谢barnyr的帮助。您是否尝试过“从tbl_进度中选择完成日期-开始日期”?我认为oug我想给你一个datetime作为1900年1月1日的补偿,你可以使用它。我喜欢datediff的想法,但是Coldfusion的年/小时/天功能非常简单。
SELECT Started_Date,
Completed_Date,
DATEDIFF(Second, Started_Date, Completed_Date) AS sec_diff,
AVG(DATEDIFF(Second, Started_Date, Completed_Date)) AS average_task_time
FROM tbl_progress