在 T-SQL 開發中,資料型別轉換與日期時間運算是最高頻的操作之一。本文深入解析 CONVERT、CAST、DATEADD 三大核心函數的語法、參數細節與實際應用場景,助你撰寫更精準、效能更佳的查詢語句。
CONVERT 專為 SQL Server 設計,支援在型別轉換時指定輸出格式(特別是日期時間),是報表與匯出功能的首選。
CONVERT(data_type(length), expression, style)
VARCHAR(20)、DATETIME。常用 Style 代碼速查:
| Style | 輸出範例 | 說明 |
|---|---|---|
| 120 | 2024-05-18 14:30:00 | ODBC 標準 (YYYY-MM-DD HH:MI:SS) |
| 111 | 2024/05/18 | 日本標準 (YYYY/MM/DD) |
| 103 | 18/05/2024 | 英式 (DD/MM/YYYY) |
| 12 | 240518 | 精簡 (YYMMDD) |
範例: 將 GETDATE() 格式化為 'YYYY-MM-DD':
SELECT CONVERT(VARCHAR(10), GETDATE(), 120) AS formatted_date;
-- 結果:2024-05-18
CAST 遵循 ANSI SQL 標準,適用於需跨資料庫平台(Oracle、PostgreSQL、MySQL 等)的專案,語法簡潔但不支援格式化參數。
CAST(expression AS data_type[(length)])
XML、BIGINT、SQL_VARIANT 等),不可使用別名型別。範例: 整數轉字串、字串轉日期:
SELECT CAST(12345 AS VARCHAR(10)); -- '12345'
SELECT CAST('2024-05-18' AS DATE); -- 2024-05-18
用於在指定日期加減年、月、日、時、分、秒等間隔,常用於計算截止日、週期性報表範圍。
DATEADD(datepart, number, date)
常用 datepart: YEAR/YY、MONTH/MM、DAY/DD、HOUR/HH、MINUTE/MI、SECOND/SS。
範例:
-- 30 天後
SELECT DATEADD(DAY, 30, GETDATE());
-- 1 個月前
SELECT DATEADD(MONTH, -1, GETDATE());
-- 找出本月第一天
SELECT DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() AS DATE));
DATEDIFF / EOMONTHWHERE 條件欄位上使用函數(如 WHERE CONVERT(...)=...),會導致索引失效;應改寫為 WHERE date_col >= ... AND date_col < ...。掌握 CONVERT 的 style 參數、CAST 的標準語法、DATEADD 的 datepart 單位,能讓你在資料清洗、報表產生、跨平台遷移等場景中遊刃有餘。建議收藏常用 Style 代碼表,開發時隨查隨用。