如何在sql中添加两个不同的时间

时间:2013-07-25 09:31:00

标签: sql-server

我有一个函数,其中包含以下代码:

DECLARE @requestedtime datetime,
    @Timeintervel int,
    @TotalTime datetime 

select @Timeintervel= datepart(MINUTE,l.Timeinterval)  
from Location_tbl l 
where l.LocName=@location

select @requestedtime= t.Paydate 
from Transaction_tbl t 
where t.TBarcode=@cardID

我正在尝试这样做:

  select @TotalTime=    DATEADD(MINUTE,@requestedtime,@Timeintervel)

...但它返回以下错误:

参数数据类型datetime对于dateadd函数的参数2无效。

输入参数:

  • @timeintervalue 15(15分钟)
  • @requestedtime是2013-05-07 17:55:42.000我想两次添加。

我想得到总时间= 2013-05-07 18:10:42.000

我怎么能得到它?我必须使用什么功能?

2 个答案:

答案 0 :(得分:2)

解决方案1:

注意:我发现您有SQL Server 2008标记的问题。

SQL2008 +有TIME data type。在这种情况下,我会使用这个解决方案:

DECLARE @RequestedTime TIME(0),
        @TimeIntervel TIME(0);

SELECT  @RequestedTime=CONVERT(TIME(0),'2013-07-20 00:25:00'),
        @TimeIntervel=CONVERT(TIME(0),'2013-07-25 10:10:10');

SELECT  @RequestedTime AS [@RequestedTime],
        @TimeIntervel AS [@TimeIntervel];

/*
@RequestedTime   @TimeIntervel
---------------- ----------------
00:25:00.0000000 10:10:10.0000000
*/

SELECT  DATEDIFF(SECOND,'00:00:00',@RequestedTime) AS ColDiff,
        DATEADD(SECOND,DATEDIFF(SECOND,'00:00:00',@RequestedTime),@TimeIntervel) AS ColFinalResult;

/*
ColDiff     ColFinalResult
----------- ----------------
1500        10:35:10.0000000
*/

警告1:首先,您需要Location_tbl表(键:LocName)上的唯一索引 查询是非确定性的(对于差异查询执行,您可能会获得差异结果),尽管数据未更改。

警告2:您需要Transaction_tbl表(键:TBarcode)上的唯一索引,否则第二个查询也是非确定性的(对于差异查询执行,您可能会获得差异结果)尽管数据未更改

解决方案2:如果您只需要将分钟数添加到time值/变量。

DECLARE @RequestedTime_Minute INT,
        @TimeIntervel TIME(0);

SELECT  @RequestedTime_Minute=DATEPART(MINUTE,'2013-07-20T00:25:00'),
        @TimeIntervel=CONVERT(TIME(0),'2013-07-25 10:10:10');

SELECT  @RequestedTime_Minute AS [@RequestedTime_Minute],
        @TimeIntervel AS [@TimeIntervel];

/*
@RequestedTime_Minute @TimeIntervel
--------------------- ----------------
25                    10:10:10.0000000
*/

SELECT  DATEADD(MINUTE,@RequestedTime_Minute,@TimeIntervel) AS ColRequestedResult;

/*
ColRequestedResult
------------------
10:35:10.0000000
*/

答案 1 :(得分:0)

尝试使用以下功能将分钟添加到日期和时间:

DATEADD(MINUTE, @Timeintervel, @requestedtime)

如果您有任何疑问,请浏览以下链接: