首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 日期時間欄位格式化完整指南:CONVERT、FORMAT 與自訂樣式

     編輯:MySQL 資料庫相關知識

SQL Server 日期時間欄位格式化完整指南:CONVERT、FORMAT 與自訂樣式


日期時間格式化是報表匯出、API 序列化、跨系統整合的高頻需求。SQL Server 提供 CONVERT(傳統、高效能)、FORMAT(CLR、靈活)、DATEPART 組合等多種方式,本文系統整理並提供常用樣式速查表。


一、CONVERT 函數:高效能、樣式代碼固定

CONVERT(data_type(length), expression, style)
  • style:預定義格式代碼(見下表),**不支援自訂格式字串**。
  • 效能優於 FORMAT,適合高頻、大量資料轉換。

常用樣式代碼速查表

Style標準輸出範例備註
100預設Mon DD YYYY HH:MIAM含毫秒
101美國MM/DD/YYYY
102 ANSIYYYY.MM.DD
103英/法DD/MM/YYYY
104德DD.MM.YYYY
105義DD-MM-YYYY
106—DD MON YYYY
107—MON DD, YYYY
108—HH:MI:SS僅時間
110美國MM-DD-YYYY
111日本YYYY/MM/DD
112ISOYYYYMMDD無分隔,適合排序/檔名
113ISO8601YYYY-MM-DDTHH:MI:SS.mmm含毫秒,XML/JSON 標準
120ODBCYYYY-MM-DD HH:MI:SS24小時制,常用
121ODBC+毫秒YYYY-MM-DD HH:MI:SS.mmm高精度
126ISO8601YYYY-MM-DDTHH:MI:SS.mmm同 113,無時區
127ISO8601+時區YYYY-MM-DDTHH:MI:SS.mmmZUTC 時間

範例

SELECT CONVERT(VARCHAR(19), GETDATE(), 120) AS dt_120;  -- 2024-01-15 14:30:45
SELECT CONVERT(VARCHAR(10), GETDATE(), 112) AS dt_112;  -- 20240115

二、FORMAT 函數:.NET 自訂格式字串,極度靈活

FORMAT(value, format [, culture])
  • 支援 .NET 自訂日期時間格式字串。
  • 可指定 culture(如 'zh-TW'、'en-US')輸出本地化月份名稱等。
  • **效能較 CONVERT 低**(CLR 呼叫開銷),大量列轉換慎用。

常用自訂格式範例

格式字串輸出範例說明
yyyy-MM-dd2024-01-15ISO 日期
yyyy/MM/dd HH:mm:ss2024/01/15 14:30:45完整日期時間
yyyy年MM月dd日2024年01月15日中文顯示
HH:mm:ss.fff14:30:45.123毫秒精度時間
yyyy-MM-dd'T'HH:mm:ss.fffZ2024-01-15T14:30:45.123ZISO8601 UTC
ddd, dd MMM yyyy HH:mm:ss 'GMT'Mon, 15 Jan 2024 14:30:45 GMTRFC1123 (HTTP Header)

範例

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss', 'zh-TW') AS fmt_zh;
SELECT FORMAT(GETDATE(), 'MMMM dd, yyyy', 'en-US') AS fmt_en;  -- January 15, 2024

三、組合函數構建特殊格式(不依賴 FORMAT)

-- YYYYMMDDHHMMSS 檔名時間戳
SELECT REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', ''), ':', '');

-- 僅取日期部分(移除時間)
SELECT CONVERT(DATE, GETDATE());  -- 2024-01-15 (DATE 型別)
SELECT CAST(GETDATE() AS DATE);   -- 同效

四、時區處理:AT TIME ZONE (SQL Server 2016+)

-- 將 UTC 時間轉為台北時間
SELECT GETUTCDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Taipei Standard Time';

-- 列出所有支援時區
SELECT * FROM sys.time_zone_info;

五、效能與選擇建議

場景推薦函數理由
大量列(>10萬)轉換CONVERT原生執行,無 CLR 開銷
報表/前端顯示、需本地化FORMAT格式字串直觀、支援文化特性
ISO8601/JSON 序列化CONVERT(..., 126/127)標準代碼、效能佳
檔名/排序鍵CONVERT(..., 112) + REPLACE無分隔符、字典序即時間序
跨時區轉換AT TIME ZONE資料庫層處理、避免應用層時區庫

常見陷阱

  • CONVERT(VARCHAR, dt, 120) 若未指定長度,預設 30 字元可能截斷毫秒;建議明確 VARCHAR(23)(含毫秒)或 VARCHAR(19)(不含毫秒)。
  • FORMAT 在 WHERE 條件中使用會導致**索引失效**;篩選應在原始 DATETIME 欄位上進行,格式化僅用於 SELECT 輸出。
  • 字串轉日期用 TRY_CONVERT / TRY_CAST(回傳 NULL 而非報錯),配合 CASE 處理髒資料。

依場景選擇 CONVERT(效能)或 FORMAT(彈性),善用樣式代碼速查表,即可高效完成各類日期時間格式化需求。

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