2009-09-14 250 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