萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL Server 時間欄位格式化常用函數與格式代碼對照表

SQL Server 無單一 DATE_FORMAT() 函數,需組合 CONVERT、FORMAT (2012+)、DATEPART 等達到格式化目的。

1. CONVERT 風格代碼 (最常用、效能最好)

CONVERT(VARCHAR, GETDATE(), style)
Style輸出範例說明
100Mon DD YYYY HH:MIAM預設含毫秒
101MM/DD/YYYY美式日期
102YYYY.MM.DD點分隔
103DD/MM/YYYY英式日期
104DD.MM.YYYY德式日期
105DD-MM-YYYY義式日期
106DD Mon YYYY月份縮寫
107Mon DD, YYYY
108HH:MI:SS純時間
110MM-DD-YYYY
111YYYY/MM/DD
112YYYYMMDD無分隔,適合排序/分組
113DD Mon YYYY HH:MI:SS:MMM歐洲預設+毫秒
120YYYY-MM-DD HH:MI:SSISO 8601 (24h)
121YYYY-MM-DD HH:MI:SS.MMMISO + 毫秒
126YYYY-MM-DDTHH:MI:SS.MMMISO 8601 T 分隔
127YYYY-MM-DDTHH:MI:SS.MMMZ含時區 Z

2. FORMAT 函數 (SQL Server 2012+,.NET 格式字串)

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss', 'zh-TW');  -- 2024-05-15 14:30:05
SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日 dddd', 'zh-TW');  -- 2024年05月15日 星期三

支援自訂格式、文化特性,但效能較 CONVERT 低,適合報表輸出非高頻查詢。

3. 組合 DATEPART / DATENAME 客製化

SELECT 
  DATEPART(year, GETDATE()) AS yr,
  DATEPART(month, GETDATE()) AS mo,
  DATEPART(day, GETDATE()) AS dy,
  DATENAME(weekday, GETDATE()) AS wk;
-- 組合字串
SELECT CAST(DATEPART(year, GETDATE()) AS VARCHAR(4)) + '-' +
       RIGHT('0'+CAST(DATEPART(month, GETDATE()) AS VARCHAR(2)),2) + '-' +
       RIGHT('0'+CAST(DATEPART(day, GETDATE()) AS VARCHAR(2)),2);

4. 實務常見需求範例

  • 日期鍵 (ETL):CONVERT(CHAR(8), dt, 112) → 20240515
  • 月份起始/結束:DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) / DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE())+1, 0))
  • 去除時間保留日期:CAST(GETDATE() AS DATE) (2008+) 或 DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)
  • 週數/季度:DATEPART(week, dt)、DATEPART(quarter, dt)

效能建議

  • 高頻查詢、索引篩選、Join 條件 → 僅用 CONVERT 或直接比較 DATETIME 值,避免函數包裹導致 SARGable 失效。
  • 報表、匯出、前端顯示 → 可用 FORMAT 簡化程式碼。
copyright © 萬盛學電腦網 all rights reserved