【问题标题】:Calculate the difference in minutes between startTime and endTime计算 startTime 和 endTime 之间的分钟差
【发布时间】: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


【解决方案1】:

我建议使用秒并除以 60.0 - 提供更准确的结果:

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

【讨论】:

    【解决方案2】:

    该表达式的正确语法是:

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

    但是,这没有任何意义,因为 - 大概 - 表格有不止一行。你想要哪一行?

    【讨论】:

      【解决方案3】:

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

      它的正确用法是:

      DATEDIFF(minute, @CallStartTime, @CallEndTime)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-28
        • 2011-10-04
        • 2022-01-03
        • 1970-01-01
        • 2021-04-13
        • 1970-01-01
        • 2012-08-22
        • 2019-09-28
        相关资源
        最近更新 更多