Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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
如果时间超过60分钟,则在sql server中以小时为单位显示_Sql_Sql Server_Stored Procedures - Fatal编程技术网

如果时间超过60分钟,则在sql server中以小时为单位显示

如果时间超过60分钟,则在sql server中以小时为单位显示,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个存储过程,如: ALTER procedure [dbo].[IBS_Podiumsummryaveragetime] @locid integer=null as begin set nocount on; select avg( datediff(mi,t.dtime, t.DelDate )) as Avgstaytime, avg( datediff(mi,t.dtime, t.PAICdate )) as Avgparkingtime, avg( datediff(

我有一个存储过程,如:

ALTER procedure [dbo].[IBS_Podiumsummryaveragetime]
@locid integer=null
as 
begin
set nocount on;
select  avg( datediff(mi,t.dtime, t.DelDate )) as Avgstaytime,
 avg( datediff(mi,t.dtime, t.PAICdate )) as  Avgparkingtime, 
 avg( datediff(mi,t.Paydate, t.DelDate )) as AvgDelivarytime 
 from (select top 10 * from transaction_tbl where locid=@locid and dtime >= getdate()-7 order by transactID desc ) t  
 end
如果我的平均时间超过60分钟,那么我想以小时为单位展示……我如何做到这一点?

任何帮助都是值得的

我无法在评论中键入此内容,因此我将其添加为答案:

SELECT 
   CASE 
      WHEN avg( datediff(mi,t.dtime, t.DelDate )) <= 60 
          THEN CAST(avg( datediff(mi,t.dtime, t.DelDate )), varchar)
      ELSE 
          CAST(avg( datediff(mi,t.dtime, t.DelDate )) / 60, varchar) + ":" + CAST(avg( datediff(mi,t.dtime, t.DelDate )) % 60, varchar)
   END 
选择
案例

当@I.K.主题的平均值(datediff(mi,t.dtime,t.DelDate))变化时(我向上投票)


在此之前回答:您能显示您想要的样本输出吗?我的意思是,你想在几小时内和几分钟内买一些吗?这似乎是个坏主意。现在的结果是以分钟为单位。如果结果超过60分钟,那么我想以小时为单位显示结果。这就是为什么不使用case语句,如果分钟大于60,则查询X,如果小于60,则查询Y。您能显示一次吗?我宁愿使用ELSE而不是第二个WHEN条件。@Karlkienger,我同意。代码已修改。先生,我正在搜索转换代码。然后我会让您知道这是否正常。您在问题评论中对@GordonLinoff的回答不清楚。您希望如何显示小时数?i、 61分钟是1,1:1,1.017吗?90分钟是1,1.5,1:30,2吗?如果是61分钟,那么我想显示1:1分钟,如果是90分钟,那么我想显示1:30,如果是130分钟,那么我想显示2:10,就像这样我在投票,因为你把
varchar()
的长度加进去了。但是一个问题,在分钟的情况下,如果平均时间只有5分钟,那么它显示为空。
SELECT CASE WHEN avg(datediff(mi,t.dtime, t.DelDate)) > 60 
            THEN CAST(avg(datediff(mi,t.dtime, t.DelDate))/60 AS VARCHAR(3)) + ':' 
            ELSE ''
       END
       + CAST(avg(datediff(mi,t.dtime, t.DelDate)) % 60  AS VARCHAR(2)) 

--OR

SELECT CASE WHEN avg(datediff(hour,t.dtime, t.DelDate)) > 0 
            THEN CAST(avg(datediff(hour,t.dtime, t.DelDate)) AS VARCHAR(3)) + ':' 
            ELSE ''
       END
       + CAST(avg(datediff(mi,t.dtime, t.DelDate)) % 60  AS VARCHAR(2))