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

SQL Server CONVERT 函數日期時間格式化輸出速查表 (100+ Style 實測)

     編輯:關於SqlServer

CONVERT 語法與 Style 參數

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

style 僅在 datetime/smalldatetime 與字符串類型互轉時生效,決定輸出/解析格式。

完整 Style 編號對照表 (含輸出示例)

Style標準/說明輸出示例 (假設 2024-01-15 10:30:45.123)
0 / 100*默認Jan 15 2024 10:30AM
1美國01/15/24
101美國 (4位年)01/15/2024
2ANSI24.01.15
102ANSI (4位年)2024.01.15
3英國/法國15/01/24
103英國/法國 (4位年)15/01/2024
4德國15.01.24
104德國 (4位年)15.01.2024
5意大利15-01-24
105意大利 (4位年)15-01-2024
6-15 Jan 24
106- (4位年)15 Jan 2024
7-Jan 15, 24
107- (4位年)Jan 15, 2024
8僅時間10:30:45
108僅時間10:30:45
9 / 109*默認+毫秒Jan 15 2024 10:30:45:123AM
10美國01-15-24
110美國 (4位年)01-15-2024
11日本24/01/15
111日本 (4位年)2024/01/15
12ISO (無分隔)240115
112ISO (4位年無分隔)20240115
13 / 113*歐洲默認+毫秒 (24h)15 Jan 2024 10:30:45:123
14僅時間+毫秒 (24h)10:30:45:123
114僅時間+毫秒 (24h)10:30:45:123
20 / 120*ODBC 標準2024-01-15 10:30:45
21 / 121*ODBC + 毫秒2024-01-15 10:30:45.123
22美國 + 秒01/15/24 10:30:45 AM
23ISO 日期 (無時間)2024-01-15
24僅時間 (無秒)10:30:45
25ODBC + .fff2024-01-15 10:30:45.250
126***ISO8601 (XML)2024-01-15T10:30:45.123
130*Hijri (伊斯蘭曆)03 Rajab 1445 10:30:45:123AM
131*Hijri03/07/1445 10:30:45:123AM

註:* 表示默認值始終含世紀位;*** 僅用於 XML 輸出。

實測 T-SQL 批量測試腳本

-- 無世紀位 (0-25)
SELECT CONVERT(VARCHAR(100), GETDATE(), 0)  AS Style0;
SELECT CONVERT(VARCHAR(100), GETDATE(), 1)  AS Style1;
-- ... 依次至 25
-- 保留號碼 15-19, 26-31 通常無效/保留

-- 有世紀位 (100-131)
SELECT CONVERT(VARCHAR(100), GETDATE(), 100) AS Style100;
SELECT CONVERT(VARCHAR(100), GETDATE(), 101) AS Style101;
-- ... 依次至 131
-- 保留號碼 115-119, 122-125, 127-129 通常無效/保留

高頻使用場景速記

需求推薦 Style輸出格式適用場景
標準日期 (可排序)23 / 120 / 112YYYY-MM-DD / YYYYMMDD文件名、分區鍵、日志、API 交互
標準日期時間120 / 121YYYY-MM-DD HH:MI:SS[.fff]數據交換、存儲、日志、跨系統
中文常用顯示111YYYY/MM/DD報表、界面顯示
精確到毫秒121 / 126YYYY-MM-DD HH:MI:SS.fff高精度時間戳、審計、排序
ISO8601 / JSON126YYYY-MM-DDTHH:MI:SS.fffREST API、XML、JSON、現代前端
僅時間8 / 108 / 14 / 114HH:MI:SS[.fff]打卡、排班、耗時統計

進階技巧:動態構建格式化查詢

-- 需求:將表中所有 DATETIME 列統一按 Style 120 輸出
DECLARE @sql NVARCHAR(MAX) = N'', @tbl SYSNAME = 'YourTable';

SELECT @sql += N', CONVERT(VARCHAR(23), ' + QUOTENAME(c.name) + N', 120) AS ' + QUOTENAME(c.name)
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID(@tbl) AND t.name IN ('datetime','smalldatetime','datetime2');

SET @sql = N'SELECT ' + STUFF(@sql, 1, 1, N'') + N' FROM ' + QUOTENAME(@tbl);
EXEC sp_executesql @sql;

版本兼容性提示

  • Style 126 (ISO8601) 需 SQL Server 2000+。
  • Style 127 保留未用。
  • SQL Server 2008+ 新增 DATE, TIME, DATETIME2, DATETIMEOFFSET 類型,CONVERT 全支持。
  • SQL Server 2012+ 推薦使用 FORMAT() 做複雜本地化格式,但性能較 CONVERT 低 3-5 倍。

反向操作:字符串 → DATETIME (解析)

-- 解析時 style 必須與字符串實際格式匹配
SELECT CONVERT(DATETIME, '2024-01-15', 120);      -- 成功
SELECT CONVERT(DATETIME, '01/15/2024', 101);      -- 成功
SELECT CONVERT(DATETIME, '15-01-2024', 105);      -- 成功

-- 格式不匹配會報錯或產生錯誤日期
-- SELECT CONVERT(DATETIME, '2024-01-15', 101);  -- 錯誤或錯誤結果

-- 2012+ 安全解析
SELECT TRY_CONVERT(DATETIME, 'invalid', 120);  -- 返回 NULL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved