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

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

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

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

但如過客戶要求 "2008-02-27" 這種格式呢？！我看會寫瘋掉了，你可能會這樣寫：

> ```sql
> 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
> ```

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

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

> ```sql
> SELECT CONVERT(char(10), getdate(), 120)
> ```

是不是短很多呢？ ^\_\_^

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

-   輸出格式：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](http://msdn2.microsoft.com/en-us/library/aa226054.aspx "MSDN T-SQL CAST and CONVERT") 的詳細說明。

**相關連結**

-   [CAST 和 CONVERT](http://msdn2.microsoft.com/zh-tw/library/ms187928.aspx)
