2

我有一个存储过程,它根据此类计算更新表,计算作为列名 ( Calendatedate) - ( Current System Date Time) 完成,并将此信息更新为列 ( ) 并以格式TimeSpent显示值 。Hh:Mm:SS:Msec

查询工作正常,但我想以这样的方式更新它,以便花费的时间应该只是HH:MM:SS格式。请帮助我了解如何Msec从所花费的时间中删除它。

CREATE procedure St_Proc_UpdateTimeSpent        
@timeEntryID int,        
@status int output        
as begin         
set nocount on;        
declare @Date dateTime;        
set @Date=GETDATE(); 
    update Production set TimeSpent=(SELECT CONVERT(VARCHAR(20),DateAdd(SS,Datediff(ss,CalendarDate, @Date)%(60*60*24),0),114)),  
    IsTaskCompleted=1       
    where productionTimeEntryID=@timeEntryID         
    set @status=1;        
    return @status;        
end 
4

1 回答 1

2

您可以在CONVERT函数中使用样式 108 而不是 114 来仅获取hh:mm:ss

CREATE PROCEDURE dbo.St_Proc_UpdateTimeSpent        
     @timeEntryID int,        
     @status int output        
AS BEGIN
   SET NOCOUNT ON;

   DECLARE @Date DATETIME;
   SET @Date = GETDATE(); 

   UPDATE dbo.Production 
   SET TimeSpent = CONVERT(VARCHAR(20), DATEADD(SS, DATEDIFF(ss, CalendarDate, @Date)%(60*60*24),0), 108),  
       IsTaskCompleted = 1
   WHERE  
       productionTimeEntryID = @timeEntryID         

   SET @status = 1;

   RETURN @status;        
END

请参阅关于 CAST 和 CONVERT 的优秀 MSDN 文档,DATETIME以获取转换为VARCHAR(和返回)时所有支持样式的完整列表

顺便说一句:SQL Server 2008 还引入了一种TIME数据类型,它可能比 a 更适合VARCHAR存储您的TimeSpent值……看看吧!

于 2012-06-19T14:18:58.627 回答