计算startTime和endTime之间的分钟差

时间:2018-05-23 12:33:33

标签: sql sql-server

我必须计算StartTime和EndTime的差异。如果EndTime小于StartTime的15分钟,我必须显示错误。

CREATE PROCEDURE [Travel].[TravelRequirementValidate] 
@Action char(1)
,@CallId int
,@PhaseId int
,@ShipId int 
,@CallStartDate datetime
,@CallEndDate DATETIME
,@CallStartTime datetime 
,@CallEndTime datetime   
,@LanguageId int
,@SessionGroup nvarchar(100)
,@SessionPlace nvarchar(100)
,@ActiveFlg tinyint
,@WarningMessage nvarchar(300)=NULL output
,@Minutes int 
as
if @Action in ('I','U')
begin
   @Minutes=select DATEDIFF(@CallStartDate,@CallStartTime,@CallEndTime) from [Travel].[TravelRequirement] 
if @Minutes<=15
begin
  raiserror(3,11,1) --CallEndTime must be equals or higher than 15 minutes
  return
end
end

此代码不起作用。我在DATEDIFF的第一个参数(为datediff指定的参数1无效)时出错。

如何修复我的代码?

修改

  

我改变了 @ Minutes = select   DATEDIFF(@ CallStartDate,@ CallStartTime,@ CallEndTime)来自   [行程] [TravelRequirement]

in

declare @Diff int
@Diff=select DATEDIFF(@Minutes,@CallStartTime,@CallEndTime) from [Travel].[TravelRequirement] 

但我有同样的错误

3 个答案:

答案 0 :(得分:2)

函数DATEDIFF想要第一个参数作为时间的一部分。

正确使用它是:

DATEDIFF(minute, @CallStartTime, @CallEndTime)

答案 1 :(得分:1)

该表达式的正确语法为:

select @Minutes = datediff(minute, @CallStartTime, @CallEndTime)
from [Travel].[TravelRequirement];

然而,这没有意义,因为 - 大概 - 表格有多行。你想要哪一排?

答案 2 :(得分:1)

我建议使用秒和60.0的偏差 - 提供更准确的结果:

select @Minutes = datediff(second, @CallStartTime, @CallEndTime)/60.0
from [Travel].[TravelRequirement];