我想显示时间,如mr.xxx登录1分钟前或1分钟前或2天前或1个月前或1年前。我怎样才能将查询写成这样显示[例如在我们的stackoverflow中我们看到mr.xx在5天前加入。他问问题2分钟前] 请帮帮我
答案 0 :(得分: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
答案 1 :(得分:1)
我希望您能记录用户上次在数据库中的SQL表中登录的时间,这可以用于审计历史记录。
使用该信息,您可以创建存储过程,该过程可以在该用户上次登录时检索信息。
e.g。上次登录的示例SQL(IN DAYS)
DECLARE @LoggedIn AS DATETIME
SET @LoggedIn = '01 Apr 2009'
SELECT DATEDIFF(dd, @LoggedIn, GETDATE()) AS 'Last Logged In (DAYS)'