我之前一直認為 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 的詳細說明。
相關連結