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関数で114の代わりにスタイル108を使用して、 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ドキュメントを参照してください。DATETIMEVARCHAR

ところで:SQL Server 2008では、値を格納するよりもおそらく適切なTIMEデータ型も導入されました...チェックしてください!VARCHARTimeSpent

于 2012-06-19T14:18:58.627 に答える