Je veux afficher l'heure comme mr.xxx login il y a 1 minute ou 1 hor. Il y a 2 jours ou 1 mois ou 1 an auparavant. comment puis-je écrire la requête à afficher comme ça [par exemple dans notre stackoverflow nous voyons mr.xx rejoint il y a 5 jours. il pose la question il y a 2 minutes] s'il vous plaît aidez-moi
Cet exemple devrait fonctionner sur n'importe quelle version de SQL Server.
C'est plus verbeux que nécessaire pour clarifier le fonctionnement.
--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 masortingx 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 masortingx 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
Je pense que vous conservez un journal de la dernière connection des users dans une table SQL de votre database, qui peut être utilisée pour l'historique d'audit.
Avec cette information, vous pouvez créer un proc stocké, qui pourrait récupérer des informations lors de la dernière connection de cet user.
Exemple de SQL pour la dernière connection (IN DAYS)
DECLARE @LoggedIn AS DATETIME SET @LoggedIn = '01 Apr 2009' SELECT DATEDIFF(dd, @LoggedIn, GETDATE()) AS 'Last Logged In (DAYS)'