首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server CONVERT() 函數完整指南:日期時間格式化、樣式代碼對照表與實戰範例

     編輯:關於SqlServer

前言

CONVERT() 是 SQL Server 將日期時間、數值等型別轉換為字串 (或反之) 的核心函數,其第三個參數 style 提供豐富的日期時間格式化選項。本文整理完整樣式代碼對照表、常用格式範例與最佳實務。

一、語法結構

CONVERT( data_type [ ( length ) ] , expression [ , style ] )
  • data_type:目標型別 (常用 VARCHAR, NVARCHAR, DATE, DATETIME 等)。
  • expression:待轉換的運算式 (如 GETDATE()、欄位、變數)。
  • style:日期時間格式代碼,僅適用於日期/時間型別轉字串;數值轉換通常忽略此參數。

二、完整日期時間樣式代碼對照表

Style ID 輸出格式範例 說明 標準/備註
0 / 100Mon DD YYYY HH:MIAM/PM預設、美式含毫秒mon dd yyyy hh:miAM
101MM/DD/YYYY美式日期mm/dd/yy
102YYYY.MM.DDANSI 標準yy.mm.dd
103DD/MM/YYYY英式/歐式日期dd/mm/yy
104DD.MM.YYYY德式日期dd.mm.yy
105DD-MM-YYYY義式日期dd-mm-yy
106DD MON YY簡短月份名dd mon yy
107MON DD, YY月份名含逗號Mon dd, yy
108HH:MI:SS純時間 24 小時hh:mm:ss
9 / 109MON DD YYYY HH:MI:SS:MMMAM/PM含毫秒完整時間mon dd yyyy hh:mi:ss:mmmAM
110MM-DD-YYYY美式連字號mm-dd-yy
111YYYY/MM/DD日式/標準yy/mm/dd
112YYYYMMDD無分隔符,排序友善yymmdd
13 / 113DD MON YYYY HH:MI:SS:MMM歐洲預設 24 小時含毫秒dd mon yyyy hh:mm:ss:mmm(24h)
114HH:MI:SS:MMM純時間含毫秒 24hhh:mi:ss:mmm(24h)
20 / 120YYYY-MM-DD HH:MI:SSODBC 標準 24hyyyy-mm-dd hh:mi:ss(24h)
21 / 121YYYY-MM-DD HH:MI:SS.MMMODBC 擴展含毫秒yyyy-mm-dd hh:mi:ss.mmm(24h)
126YYYY-MM-DDTHH:MI:SS.MMMISO 8601 (無空格)yyyy-mm-ddThh:mm:ss.mmm
130DD MON YYYY HH:MI:SS:MMMAM/PM回曆/伊斯蘭曆dd mon yyyy hh:mi:ss:mmmAM
131DD/MM/YY HH:MI:SS:MMMAM/PM回曆短格式dd/mm/yy hh:mi:ss:mmmAM

三、常用實戰範例


-- 1. 純日期 (YYYYMMDD) - 檔名、分割鍵、比對最佳
SELECT CONVERT(VARCHAR(8), GETDATE(), 112);  -- 20241219

-- 2. 標準日期時間 (YYYY-MM-DD HH:MI:SS) - 日誌、API、匯出
SELECT CONVERT(VARCHAR(19), GETDATE(), 120); -- 2024-12-19 14:30:45

-- 3. 含毫秒完整時間 (ISO 8601) - 精確排序、跨系統交換
SELECT CONVERT(VARCHAR(23), GETDATE(), 121); -- 2024-12-19 14:30:45.123
SELECT CONVERT(VARCHAR(24), GETDATE(), 126); -- 2024-12-19T14:30:45.123

-- 4. 顯示友善格式 (中文環境常用)
SELECT CONVERT(VARCHAR(11), GETDATE(), 106); -- 19 Dec 2024
SELECT CONVERT(VARCHAR(10), GETDATE(), 111); -- 2024/12/19

-- 5. 純時間
SELECT CONVERT(VARCHAR(8), GETDATE(), 108);  -- 14:30:45
SELECT CONVERT(VARCHAR(12), GETDATE(), 114); -- 14:30:45.123

四、進階技巧與注意事項

1. FORMAT() 函數 (SQL 2012+):更彈性但較慢


SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss', 'zh-TW'); -- 2024-12-19 14:30:45
SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日 dddd', 'zh-TW'); -- 2024年12月19日 星期四
  • 支援 .NET 自訂格式字串與文化特性,適合報表顯示層。
  • 效能較 CONVERT 慢 3~5 倍,高頻查詢/大量資料轉換請用 CONVERT。

2. 字串轉日期:隱性轉換風險


-- 危險:依賴伺服器語言/日期格式設定
SELECT CAST('12/31/2024' AS DATETIME);  -- 美式環境 OK,英式環境錯誤

-- 安全:明確指定 style
SELECT CONVERT(DATETIME, '2024-12-31', 120);  -- ISO 格式通用
SELECT CONVERT(DATETIME, '31/12/2024', 103);  -- 英式格式

3. 日期運算請用原生函數,勿轉字串運算


-- 錯誤示範:字串比較/運算
WHERE CONVERT(VARCHAR(10), OrderDate, 112) = '20241219'

-- 正確:SARGable 索引可用
WHERE OrderDate >= '2024-12-19' AND OrderDate < '2024-12-20'
-- 或 SQL 2008+
WHERE CAST(OrderDate AS DATE) = '2024-12-19'

4. 長度參數務必足夠


-- 錯誤:長度 10 截斷毫秒
SELECT CONVERT(VARCHAR(10), GETDATE(), 121); -- 2024-12-19

-- 正確:至少 19 (無毫秒) 或 23 (含毫秒)
SELECT CONVERT(VARCHAR(23), GETDATE(), 121);

五、快速查詢腳本:列出所有 style 輸出


DECLARE @styles TABLE (id INT PRIMARY KEY, descr VARCHAR(100));
INSERT INTO @styles VALUES
(0,'Default'),(101,'US'),(102,'ANSI'),(103,'UK'),(104,'German'),(105,'Italian'),
(106,'Short Mon'),(107,'Mon DD, YY'),(108,'Time'),(9,'Default+ms'),(110,'US-'),
(111,'JP'),(112,'ISO Date'),(13,'Euro+ms'),(114,'Time+ms'),(20,'ODBC'),(21,'ODBC+ms'),
(126,'ISO8601'),(130,'Hijri'),(131,'Hijri Short');

SELECT id, descr, CONVERT(VARCHAR(30), GETDATE(), id) AS output
FROM @styles
ORDER BY id;

結語

CONVERT() 配合 style 代碼是 SQL Server 日期時間格式化的利器。牢記 112 (YYYYMMDD)、120 (ODBC)、121 (含毫秒)、126 (ISO8601) 四大黃金格式,搭配 FORMAT() 處理報表顯示層,並堅持「運算用原生型別、顯示才轉字串」原則,即能寫出正確、高效、可攜的日期處理程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved