2

我怎样才能得到这样的全部时间datediff(time, logindate, logoutdate)

我知道这个内置函数不接受时间参数,但我怎样才能得到整个时间而不是分钟、毫秒、秒等?

logindate datetime2
logoutdate datetime2

我想要像 1:05:45 这样的东西,而不是它的一部分。

4

6 回答 6

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 日期并返回格式化为时间的值。

于 2009-11-15T03:00:31.307 回答
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 用于格式化日期时间,而不是时间跨度。

于 2009-11-15T02:36:35.067 回答
0

因为 MSSQL 没有 timepsan 数据类型,datediff以毫秒到年的绝对整数返回应该足以让您TimeSpan在 .NET 中创建 say 的实例。

于 2009-11-15T02:39:37.900 回答
0

你在说什么 Sql Server 版本?在 SQL Server 2000 及更高版本中,至少,

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

将以秒为单位为您提供这两个日期时间之间的差异。

于 2009-11-15T02:39:48.180 回答
0

例如选择 CONVERT(varchar(10),GETDATE(),108)

于 2009-11-15T06:32:00.013 回答
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


于 2009-11-15T13:39:50.143 回答