2009-09-14 183 views
1

我想显示时间,如mr.xxx登录1分钟前或1个月前或2天前或1个月前或1年前。我该如何编写查询来显示这样的内容[例如我们在5天前加入的我们看到的mr.xx中的stackoverflow。他问问题2分钟前] 请帮我查询日期时间

+0

您几乎可以肯定地在您的前端代码(C#,VB,无论什么)而不是SQL查询中执行此操作。 – LukeH 2009-09-14 10:28:33

+0

@surya:那么你应该做礼貌和适当的事情,并接受最好的答案/真正解决你的问题。要接受答案,请用向上和向下箭头点击“0”下面答案左边的复选标记。如果有人帮助你 - 请尽量接受答案。 – 2009-09-14 21:28:42

回答

2

本示例应适用于任何版本的SQL Server。

它比它确实需要更加详细地说明它是如何工作的。

--create test data 
create table #t 
(id int 
,lastTime datetime 
) 

insert #t 
select 1,dateadd(mi,-1,getdate()) 
union select 2,dateadd(hh,-1,getdate()) 
union select 3,dateadd(dd,-1,getdate()) 
union select 4,dateadd(mm,-1,getdate()) 
union select 5,dateadd(yy,-1,getdate()) 
union select 6,dateadd(yy,-5,getdate()) 
union select 7,NULL 

-- carry out formatting to handle pluralisation 
SELECT id 
     ,ISNULL(lastAction,'Never') 
     + CASE WHEN lastVal > 1 
       THEN 's ago' 
       WHEN lastVal = 1 
       THEN ' ago' 
       ELSE '' 
     END 
FROM 
(
     -- Use coalesce to select the first non-null value from the matrix 
     SELECT id 
       ,COALESCE(CAST(years as VARCHAR(20)) + ' year' 
         ,CAST(months as VARCHAR(20)) + ' month' 
         ,CAST(days as VARCHAR(20)) + ' day' 
         ,CAST(hours as VARCHAR(20)) + ' hour' 
         ,CAST(minutes as VARCHAR(20)) + ' minute' 
         ,CAST(secs as VARCHAR(20)) + ' second' 
         ) as lastAction 
       ,COALESCE(years 
         ,months 
         ,days 
         ,hours 
         ,minutes 
         ,secs 
         ) as lastVal 
     FROM     
     (
       -- create a matrix of elapsed time 
       SELECT id 
         ,datediff(ss,lastTime,getdate()) secs 
         ,NULLIF(datediff(mi,lastTime,getdate()),0) minutes 
         ,NULLIF(datediff(hh,lastTime,getdate()),0) hours 
         ,NULLIF(datediff(dd,lastTime,getdate()),0) days 
         ,NULLIF(datediff(mm,lastTime,getdate()),0) months 
         ,NULLIF(datediff(yy,lastTime,getdate()),0) years 
       from #t 
     ) as X 
) AS Y 
+0

不错的查询埃德哈珀谢谢你 – 2009-09-14 11:06:03

+0

好的答案埃德+1 – kevchadders 2009-09-14 14:16:51

1

我希望你会保持一个记录,当用户最后一次登录数据库中的SQL表时,可以用于审计历史记录。

有了这些信息,你可以创建一个存储过程,它可以检索信息时,该用户在上次登录。

例如上次登录时的SQL示例(IN DAYS)

DECLARE @LoggedIn AS DATETIME 
SET @LoggedIn = '01 Apr 2009' 

SELECT DATEDIFF(dd, @LoggedIn, GETDATE()) AS 'Last Logged In (DAYS)' 
+0

好的谢谢你kevchadders – 2009-09-14 10:55:24