Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 平均时间&;以指定格式显示(Coldfusion)_Sql Server_Coldfusion_Date Format_Datediff - Fatal编程技术网

Sql server 平均时间&;以指定格式显示(Coldfusion)

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运行查询。这两列都是日期时间字段 查询是(类似于): 然后我需要迭代查询结果,获得完成日期和开始日期之

编辑:多亏了barnyr,我得到了以秒为单位的平均值,所以现在我只需要将其转换为正确的格式。不幸的是,Peter提到的Coldfusion函数只接受一个datetime对象,所以我又被转换难倒了

我有一个双重问题。我需要生成Y个用户完成一项任务所花费的平均时间,然后以特定格式显示结果:x年x月x周x天x小时x分x秒

我的后端数据库是SQLServer2008,我正在通过Coldfusion 10运行查询。这两列都是日期时间字段

查询是(类似于):

然后我需要迭代查询结果,获得完成日期和开始日期之间的差异(即持续时间),平均结果,并如上所述显示

从Stackoverflow上的另一个线程中,我得到了以下代码,但它只适用于所需格式的天/小时/分钟/秒部分

<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