The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

善用 SQL Server 中的 CONVERT 函數處理日期字串

我之前一直認為 SQL Server 針對日期處理的函數不夠多(如果跟 MySQL 比較),尤其是處理日期欄位轉字串的時候,常常因為要輸出特定的格式而懊惱不已,常常一不小心就寫了一長串,很不易閱讀。

例如說初學者可能為了輸入一個 "2008-2-27" 的格式會這樣寫:

[code:tsql]

select convert(varchar(4),Year(getdate())) + '-' + convert(varchar(2), month(getdate()))+ '-' + convert(varchar(2), day(getdate()))

[/code]

但如過客戶要求 "2008-02-27" 這種格式呢?!我看會寫瘋掉了,你可能會這樣寫:

[code:tsql]

select
 convert(varchar(4),Year(getdate())) + '-' +
 CASE month(getdate())
 WHEN  1 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  2 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  3 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  4 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  5 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  6 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  7 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  8 THEN '0' + convert(varchar(2), month(getdate()))
 WHEN  9 THEN '0' + convert(varchar(2), month(getdate()))
 ELSE convert(varchar(2), month(getdate())) END +
  '-' +
 CASE day(getdate())
 WHEN  1 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  2 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  3 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  4 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  5 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  6 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  7 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  8 THEN '0' + convert(varchar(2), day(getdate()))
 WHEN  9 THEN '0' + convert(varchar(2), day(getdate()))
 ELSE convert(varchar(2), day(getdate())) END

[/code]

別笑!我真的看過有人這樣寫!呵呵~

其實 SQL Server 早就有個 CONVERT 函數可以幫我們做這件事!如果你要輸出 2008-02-27 這種日期格式的字串,可以這樣寫: 

[code:tsql]

SELECT CONVERT(char(10), getdate(), 120)

[/code]

是不是短很多呢? ^__^

底下列出一些我常用的語法:

  • 輸出格式:2008-02-27 00:25:13

    SELECT CONVERT(char(19), getdate(), 120)

  • 輸出格式:2008-02-27

    SELECT CONVERT(char(10), getdate(), 20)

     
  • 輸出格式:2008.02.27

    SELECT CONVERT(char(10), getdate(), 102)

  • 輸出格式:08.02.27

    SELECT CONVERT(char(8), getdate(), 2)

  • 輸出格式:2008/02/27

    SELECT CONVERT(char(10), getdate(), 111)

  • 輸出格式:08/02/27

    SELECT CONVERT(char(8), getdate(), 11)

  • 輸出格式:20080227

    SELECT CONVERT(char(8), getdate(), 112)

  • 輸出格式:080227

    SELECT CONVERT(char(6), getdate(), 12)

想查詢完整的列表與說明可以到 MSDN 的 Transact-SQL Reference 去查詢 CAST and CONVERT 的詳細說明。

相關連結