MSSQL - DateDiff 的應用,相對時間差的表現法

GMAIL的時間表達方式我一項很喜歡,他會用比較直覺方式讓你知道該文件到底存在多久了.如果我們要寫這樣的效果,如果我們也同樣想在asp.net上寫出同樣的效果該怎樣寫才好咧? 我習慣將類似計算寫資料庫端的FUNCTION上,效能快,好維護且可套用在所有的查詢上.

我的寫法如下:
create function myDateDiff(
@dt as datetime
)
returns nvarchar(50)
as
begin
declare @result as nvarchar(50);
declare @g as datetime; set @g=getdate();
select @result=
case when datediff(dd,@dt,@g)>2 then convert(varchar(10),@dt,101) else
case when datediff(dd,@dt,@g)=2 then '前天' else '' end+
case when datediff(dd,@dt,@g)=1 then '昨天' else '' end+
case when datediff(hh,@dt,@g)>0 then convert(varchar(2),datediff(hh,@dt,@g)%24)+'小時又' else '' end+
case when datediff(mi,@dt,@g)>0 then convert(varchar(2),datediff(mi,@dt,@g)%60)+'分' else '' end+
case when datediff(ss,@dt,@g)>0 then convert(varchar(2),datediff(ss,@dt,@g)%60)+'秒前' else '' end
end
return @result
end
--end


我們可以SQL查詢畫面下執行,可以有下列幾種的表現方式:

select dbo.mydatediff('2008/3/25 11:17:55') -->35秒前
--------------------------------------------------
select dbo.mydatediff('2008/3/25 11:15:55') -->
2分鐘35秒前
--------------------------------------------------
select dbo.mydatediff('2008/3/24 11:15:55') -->昨天2分鐘35秒前
--------------------------------------------------
select dbo.mydatediff('2008/3/23 11:15:55') -->前天2分鐘35秒前
--------------------------------------------------
select dbo.mydatediff('2008/3/21 11:15:55') -->03/21/2008
--------------------------------------------------

其他的format方式就看自己怎樣做變化了....


沒有留言:

張貼留言