【发布时间】:2018-11-02 10:53:23
【问题描述】:
我必须计算 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) 来自 [旅行].[旅行要求]
在
declare @Diff int
@Diff=select DATEDIFF(@Minutes,@CallStartTime,@CallEndTime) from [Travel].[TravelRequirement]
但我有同样的错误
【问题讨论】:
-
DateDiff 的第一个参数是你想要的日期部分,你可以使用 MINUTE 来达到你的目的
-
除了 Brad 的输入,请确保 @CallerStartTime 作为日期时间变量同时包含时间和日期,或者至少 CallStartTime 和 CallEndTime 都不包含日期部分。
-
你可以试试这个链接:stackoverflow.com/questions/26991807/…
-
如果你想让 15 分钟精确,并代表 900 秒,以秒为单位做时差,datediff 计算跨越的边界,因此可以出现一个仅相隔 14 分 10 秒的值跨越 15 分钟的界限。
-
您是否检查了docs 中的
DATEDIFF()?
标签: sql sql-server