Nhiều lần, có một yêu cầu để hiển thị ngày cuối cùng hoạt động và thời gian thông minh cho cuối cùng đăng nhập, tin nhắn cuối cùng, trò chuyện cuối cùng, vv.. giống như các mạng xã hội Vì vậy, tôi đã tạo ra một chức năng trong Microsoft SQL, mà sẽ trả về ngày hoạt động cuối cùng hoặc thời gian. Chức năng này sẽ so sánh thời gian ngày cuối cùng với thời gian ngày hiện tại đó là ‘GETDATE ()’ và sẽ trả về kết quả phù hợp.
Đây là các câu lệnh test
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(day,-1,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(day,-2,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(month,-1,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(month,-2,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(year,-3,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (dateadd(year,-1,getdate()))
GO
SELECT [dbo].[F_GetLastActiveDateTime] (getdate())
Còn đây là Function dùng để format thời gian:
CREATE FUNCTION [dbo].[F_GetLastActiveDateTime]
(
-- Add the parameters for the function here
@lastActiveDate Datetime
)
RETURNS varchar(30)
AS
BEGIN
DECLARE @LastActivity varchar(100)
SET @LastActivity = '';
-- Add the T-SQL statements to compute the return value here
DECLARE @today datetime, @nowLastActiveDate datetime
DECLARE @years int, @months int, @days int, @hours int, @minutes int, @seconds int, @h int, @m int, @s int
SELECT @today = GETDATE()
SELECT @nowLastActiveDate = DATEADD(year,DATEDIFF(year, @lastActiveDate, @today), @lastActiveDate)
SELECT @years = DATEDIFF(year, @lastActiveDate, @today) - (CASE WHEN @nowLastActiveDate > @today THEN 1 ELSE 0 END)
SELECT @months = MONTH(@today - @nowLastActiveDate) - 1
SELECT @days = DAY(@today - @nowLastActiveDate) - 1
SELECT @h = DATEDIFF(HOUR, @lastActiveDate, @today)
SELECT @m = DATEDIFF(MINUTE, @lastActiveDate, @today)
SELECT @s = DATEDIFF(SECOND, @lastActiveDate, @today)
SET @hours = (@h%24)
SET @minutes = (@m%60)
SET @seconds = (@s%60)
SET @LastActivity =
(CASE
WHEN @years = 1 THEN '1 year ago'
WHEN @years > 1 THEN convert(varchar(3),@years) + ' years ago'
WHEN @months = 1 THEN '1 month ago'
WHEN @months > 1 THEN convert(varchar(3),@months) + ' months ago'
WHEN @days = 1 THEN '1 day ago'
WHEN @days > 1 THEN convert(varchar(3),@days) + ' days ago'
WHEN @hours = 1 THEN '1 hour ago'
WHEN @hours > 1 THEN convert(varchar(3),@hours) + ' hours ago'
WHEN @minutes = 1 THEN '1 minute ago'
WHEN @minutes > 1 THEN convert(varchar(3),@minutes) + ' minutes ago'
WHEN @seconds = 1 THEN '1 second ago'
ELSE 'just now'
END)
RETURN @LastActivity;
END