запрос даты и времени - PullRequest
       2

запрос даты и времени

1 голос
/ 14 сентября 2009

Я хочу отображать время, например, mr.xxx, логин 1 минуту назад, 1 час назад, 2 дня назад, 1 месяц назад или 1 год назад Как я могу написать запрос для отображения так [например, в нашем стеке потока мы видим, что mr.xx присоединился 5 дней назад. он задает вопрос 2 минуты назад] пожалуйста, помогите мне

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

Этот пример должен работать на любой версии 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 голос
/ 14 сентября 2009

Я ожидаю, что вы будете вести журнал того, когда пользователи последний раз входили в таблицу SQL в вашей базе данных, что можно использовать для истории аудита.

С помощью этой информации вы можете создать сохраненный процесс, который мог бы получать информацию, когда этот пользователь последний раз входил в систему.

например. Пример SQL для последнего входа в систему (IN DAYS)

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

SELECT DATEDIFF(dd, @LoggedIn, GETDATE()) AS 'Last Logged In (DAYS)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...