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

回應
Google Search
Google
平均分數:0 顆星
投票人數:0
我要評分:
Google