如果时间超过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))