發表文章

目前顯示的是有「時間處理」標籤的文章

[SQL] 資料庫時間的儲存 (Epochtime/Timestamp)

圖片
如果要在資料庫中儲存時間,建議不要用datetime格式,請使用int資料型態。 原因如下: 1. 各家資料庫系統對於時間儲存有自己的格式。 2. 若為全球性的系統或軟體,資料庫儲存時間在轉換時區時,可能會因時區不同造成系統錯誤的問題。 因此,目前現行資料庫會建議使用int資料型態,儲存成epochtime/timestamp格式。 Epochtime其實只是一串整數。換算方式是以1970/1/1 00:00:00為基準,計算現在的格林威治時間與基準時間差了幾秒,然後把秒數轉成整數。 讓資料庫只儲存數字,數字至時間格式的轉換交由程式去做。 格式轉換網址: www.epochconverter.com

[SQL] 資料庫時間處理與查詢

dateadd() 時間加減 dateadd(單位, 多少單位, 欄位/func()) 範例: select dateadd(day, 5, getdate()) /*現在時間加五天*/ select dateadd(day, -20, getdate())  /*現在時間減20天*/ select getdate() /*取得現在時間*/ select dateadd(day, 1, ‘2018/2/28 0:0:0’)  /*確認是否有2/29*/ 註:每家資料庫的function都不同<oracle/MSSQL/Access都不同> datediff() 計算兩個時間的差距 語法:DATEDIFF ( datepart , startdate , enddate ) 範例:計算table1裡的dd欄位,其欄位值裡的時間與現在時間差多少天。 select datediff(day, getdate(), dd) from table1 進階練習:計算userinfo裡的會員年齡。 --userinfo 每個人的年齡 --Wrong Ans_有BUG (用年份去算會造成多算一歲) SELECT userinfo.uid as '身分證', cname as '姓名', datediff(year,userinfo.bday,getdate()) as '年齡' FROM userinfo --Wrong Ans2_有BUG (超過一定數字後的差異不見了) SELECT userinfo.uid as 'ID No.', cname as 'Name', datediff(year,userinfo.bday,getdate())/365 as 'Age' FROM userinfo --正解_使用天數除以365.25計算年齡 SELECT userinfo.uid as ‘ID No.’, cname as ‘Name’, bday as Birthday, floor(datediff(day,userinfo.bday,getdate())/365.25 )  + 1 as...