200912271546SQL:Getdate 日期格式
在撰寫資訊系統的時間記錄或LOG檔時,常會用到 getdate() 這個函式來取得系統時間,並且記錄到資料表中。
單純執行 SELECT GETDATE()會得到「2009-12-27 15:17:57.623」訊息,詳細了記錄了年-月-日 時:分:秒.毫秒。
但是有時我們並不需要這麼詳細的時間記錄,所以我們必須對日期時間格式作個轉換,例如
SELECT CONVERT(varchar(10), GETDATE(),102) AS 日期
=> 2009.12.27
CONVERT ( 資料型別 [(長度)] , expression內容 [, 樣式代碼])
[]:代表可有可無部分
簡單舉幾個常用的樣式代碼
- 101: mm/dd/yyyy - 12/27/2009
- 2 : yy.mm.dd - 09.12.27
- 103: dd/mm/yyyy - 27/12/2009
- 104: dd.mm.yy - 27.12.2009
- 11 : yy/mm/dd - 09/12/27
- 111: yyyy/mm/dd - 2012/12/09
如果要轉換為民國的年計算,則用
SELECT N'民國'+ CONVERT(VARCHAR(10),(GETDATE()-CAST('1911' AS DATETIME)),11) AS 民國日期
=>民國98/12/28
妥善的使用日期格式,可以幫助你對日期格式的比較與計算,預設的 milliseconds 很多時候是用不著的。
------
CONVERT(char(19), getdate(), 120)
=>2010-02-02 11:05:20 --- 這種格式也蠻常使用的
~End
後記:SELECT * FROM Orders WHERE odate BETWEEN '2009-01-01' AND '2009-12-31'
使用 Between 做條件判斷時,需注意他真實的時間範圍判斷是包含
2009-01-01 0:0:0.000 ~ 2009-12-31 0:0:0.000
相信你注意到上面的時間範圍有問題了,因為對於 12/31 只計算到了 0:0:0.000 那千分之一秒,而當天剩下的時間都沒計算到,這樣當然是錯誤的。
-------------------
後記2:當你在 SQL 2005 執行 SELECT getdate() 時會得到「2010-02-02 10:52:56.253」,但是透過程式執行時,寫入時卻是「02 02 2010 10:52AM」,有這等格式上的差異!如果不想格式不一樣,就用 Convert 來轉換一下格式吧!
------------------
Convert 可以幫你將日期時間格式轉換成你接受的樣式,但是如果你只想取出月份、日期......等等部分資訊,該怎麼做呢?
取出月份
SELECT DATEPART(yyyy,GETDATE()) as '年',DATEPART(mm,GETDATE()) as '月',DATEPART(dd,GETDATE()) as '日',DATEPART(hh,GETDATE()) as '時',DATEPART(mi,GETDATE()) as '分',DATEPART(ss,GETDATE()) as '秒',DATEPART(ms,GETDATE()) as '毫秒'
SELECT DATEPART(qq,GETDATE()) as '季',DATEPART(dy,GETDATE()) as '第幾天',DATEPART(ww,GETDATE()) as '第幾週',DATEPART(dw,GETDATE()) as '星期'
20100713 補
~ End