gpt4 book ai didi

sql - 在 SQL 中将 DateTime 转换为 "n Hours Ago"的最佳方法

转载 作者:行者123 更新时间:2023-12-04 13:25:35 32 4
gpt4 key购买 nike

我编写了一个 SQL 函数,将 SQL 中的日期时间值转换为更友好的“n 小时前”或“n 天前”等类型的消息。我想知道是否有更好的方法来做到这一点。

(是的,我知道“不要在 SQL 中这样做”,但出于设计原因,我必须这样做)。

这是我写的函数:

CREATE FUNCTION dbo.GetFriendlyDateTimeValue
(
@CompareDate DateTime
)
RETURNS nvarchar(48)
AS
BEGIN
DECLARE @Now DateTime
DECLARE @Hours int
DECLARE @Suff nvarchar(256)
DECLARE @Found bit

SET @Found = 0
SET @Now = getDate()
SET @Hours = DATEDIFF(MI, @CompareDate, @Now)/60

IF @Hours <= 1
BEGIN
SET @Suff = 'Just Now'
SET @Found = 1
RETURN @Suff
END

IF @Hours < 24
BEGIN
SET @Suff = ' Hours Ago'
SET @Found = 1
END

IF @Hours >= 8760 AND @Found = 0
BEGIN
SET @Hours = @Hours / 8760
SET @Suff = ' Years Ago'
SET @Found = 1
END

IF @Hours >= 720 AND @Found = 0
BEGIN
SET @Hours = @Hours / 720
SET @Suff = ' Months Ago'
SET @Found = 1
END

IF @Hours >= 168 AND @Found = 0
BEGIN
SET @Hours = @Hours / 168
SET @Suff = ' Weeks Ago'
SET @Found = 1
END

IF @Hours >= 24 AND @Found = 0
BEGIN
SET @Hours = @Hours / 24
SET @Suff = ' Days Ago'
SET @Found = 1
END

RETURN Convert(nvarchar, @Hours) + @Suff
END

最佳答案

正如你所说,我可能不会用 SQL 来做,但作为一个思考练习,有一个 MySQL 实现:

CASE
WHEN compare_date between date_sub(now(), INTERVAL 60 minute) and now()
THEN concat(minute(TIMEDIFF(now(), compare_date)), ' minutes ago')

WHEN datediff(now(), compare_date) = 1
THEN 'Yesterday'

WHEN compare_date between date_sub(now(), INTERVAL 24 hour) and now()
THEN concat(hour(TIMEDIFF(NOW(), compare_date)), ' hours ago')

ELSE concat(datediff(now(), compare_date),' days ago')
END

基于在 MySQL Date and Time 上看到的类似样本手册页

关于sql - 在 SQL 中将 DateTime 转换为 "n Hours Ago"的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50149/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com