2009-11-15 71 views
2

我怎樣才能得到整個時間這樣datediff(time, logindate, logoutdate)獲得的全部時間

我知道這個內置的功能不接受時的說法,但我怎麼能得到的全部時間,而不是分鐘,毫秒,秒等。?

logindate datetime2 
logoutdate datetime2 

我想要像1:05:45而不是它的一部分。

回答

4

試試這個

create table dbo.UserLog (UserID VARCHAR(32),loginDate DATETIME,logoutDate DATETIME) 

insert into userLog VALUES ('SPARKY','11/14/2009 3:25pm',getDate()) 
insert into userLog VALUES ('JANNA','11/14/2009 10:45am',getDate()) 

select UserId,loginDate,logoutDate, 
    convert(varchar(12),dateAdd(mi,datediff(mi,logindate,logoutdate),'Jan 1 1753 12:00AM'),114) as timeSpent 
FROM userLog 

基本上,添加日期之間的分鐘差最早有效的SQL日期並返回格式化爲一個時間值。

1

要具有差異天:

select cast(logoutdate - logindate as float) from table_name 

或只是

select logoutdate - logindatefrom table_name 

您可以評估日,小時,從它分鐘。

編輯

把它格式化爲時間:

SELECT CONVERT(VARCHAR,DATA_KOSZTU - DATA_OST_ZMIANY,108) FROM TR_KOSZT 

,它會工作,如果還沒有登錄了超過24小時的用戶,因爲CONVERT用於格式化日期時間,而不是時間跨度。

0

因爲MSSQL沒有timepsan數據類型,所以datediff以絕對整數從毫秒到數年返回應該足以讓您在.NET中創建一個說明TimeSpan的實例。

0

你在說什麼Sql Server版本?在SQL Server 2000和更高版本中,至少,

SELECT datediff(ss,'2006-11-10 05:47:53.497','2006-11-10 05:48:10.420') 

會給你這兩個日期時間之差,以秒爲單位。

+0

SQL Server,但我想像1:05:45而不是它的一部分。 – Tarik 2009-11-15 03:14:16

+0

我的意思是SQL Server 2008 – Tarik 2009-11-15 03:15:12

0

例如, select CONVERT(varchar(10),GETDATE(),108)

0

這是您正在尋找的解決方案。

 

DECLARE @Date1 datetime 
DECLARE @Date2 datetime 
SET @Date2 = '2006-11-15 07:26:25.000' 
SET @Date1 = '2009-11-15 05:35:45.000' 
--   ----------------------- 
-- Math done by hand  1:50:40 
-- 
DECLARE @TotalSeconds bigint 
DECLARE @Hours  bigint 
DECLARE @Minutes  bigint 
DECLARE @Seconds  bigint 
DECLARE @HH   varchar(20) 
DECLARE @MM   varchar(2) 
DECLARE @SS   varchar(2) 
DECLARE @Result  varchar(50) 
-- 
SET @TotalSeconds = datediff(ss,@Date1 ,@Date2) 
SET @Hours  = FLOOR(@TotalSeconds/3600) 
SET @TotalSeconds = @TotalSeconds % 3600 
SET @Minutes  = FLOOR(@TotalSeconds/60) 
SET @Seconds  = @TotalSeconds % 60 
-- 
SET @HH = CAST(@Hours as varchar) 
SET @MM = CAST(@Minutes as varchar) 
SET @SS = CAST(@Seconds as varchar) 
IF @Minutes < 10 SET @MM = '0' + @MM 
IF @Seconds < 10 SET @SS = '0' + @SS 
-- 
SET @Result = @HH + ':' + @MM + ':' + @SS 
SELECT @Result