我有一个函数,其中包含以下代码:
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
我怎么能得到它?我必须使用什么功能?
答案 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)
如果您有任何疑问,请浏览以下链接: