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

Я хочу показать время, например, mr.xxx login 1 минута назад или 1 час назад или 2 дня назад или 1 месяц назад или 1 год назад. как я могу написать запрос для отображения, как это [например, в нашем stackoverflow мы видим, что mr.xx присоединился 5 дней назад. он задает вопрос 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 

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

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

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

 DECLARE @LoggedIn AS DATETIME SET @LoggedIn = '01 Apr 2009' SELECT DATEDIFF(dd, @LoggedIn, GETDATE()) AS 'Last Logged In (DAYS)' 
Давайте будем гением компьютера.