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

SQL Server CONVERT 函數詳解:datetime 轉字符串格式大全與實戰技巧

     編輯:關於SqlServer

CONVERT 語法回顧

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
  • data_type:目標類型 (如 VARCHAR, CHAR, NVARCHAR)。
  • length:可選長度。
  • expression:待轉換的表達式 (通常是 GETDATE() 或 datetime 列)。
  • style:核心參數,指定輸出格式編號,僅在 datetime/smalldatetime 與字符串類型互轉時生效。

Style 編號完整對照表

無世紀 (yy)有世紀 (yyyy)標準/說明輸出示例
0 或 100*100默認mon dd yyyy hh:miAM (如: Jan 15 2024 10:30AM)
1101美國mm/dd/yyyy (如: 01/15/2024)
2102ANSIyy.mm.dd / yyyy.mm.dd
3103英國/法國dd/mm/yy / dd/mm/yyyy
4104德國dd.mm.yy / dd.mm.yyyy
5105意大利dd-mm-yy / dd-mm-yyyy
6106-dd mon yy / dd mon yyyy
7107-mon dd, yy / mon dd, yyyy
8108-hh:mm:ss (僅時間)
9 或 109*109默認+毫秒mon dd yyyy hh:mi:ss:mmmAM
10110美國mm-dd-yy / mm-dd-yyyy
11111日本yy/mm/dd / yyyy/mm/dd
12112ISOyymmdd / yyyymmdd
13 或 113*113歐洲默認+毫秒dd mon yyyy hh:mm:ss:mmm (24h)
14114-hh:mi:ss:mmm (24h, 僅時間)
20 或 120*120ODBC 標準yyyy-mm-dd hh:mm:ss[.fff]
21 或 121*121ODBC+毫秒yyyy-mm-dd hh:mm:ss[.fff]
-126***ISO8601yyyy-mm-ddThh:mm:ss.mmm (無空格, 用於 XML)
130*130Hijri (科威特算法)dd mon yyyy hh:mi:ss:mmmAM
131*131Hijridd/mm/yy hh:mi:ss:mmmAM

註釋說明:

  • * 默認值 (0/100, 9/109, 13/113, 20/120, 21/121) 始終返回世紀位 (yyyy)。
  • ** 轉換 為 datetime 時為輸入格式;轉換 為 字符數據時為輸出格式。
  • *** 專用於 XML。float/money/smallmoney→字符等同 style 2;real→字符等同 style 1。
  • Hijri 為伊斯蘭曆,SQL Server 採用科威特算法。

無世紀位格式實測代碼 (Style 0-25)

SELECT CONVERT(VARCHAR(100), GETDATE(), 0)  AS Style0   -- Jan 15 2024 10:30AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 1)  AS Style1   -- 01/15/24
SELECT CONVERT(VARCHAR(100), GETDATE(), 2)  AS Style2   -- 24.01.15
SELECT CONVERT(VARCHAR(100), GETDATE(), 3)  AS Style3   -- 15/01/24
SELECT CONVERT(VARCHAR(100), GETDATE(), 4)  AS Style4   -- 15.01.24
SELECT CONVERT(VARCHAR(100), GETDATE(), 5)  AS Style5   -- 15-01-24
SELECT CONVERT(VARCHAR(100), GETDATE(), 6)  AS Style6   -- 15 Jan 24
SELECT CONVERT(VARCHAR(100), GETDATE(), 7)  AS Style7   -- Jan 15, 24
SELECT CONVERT(VARCHAR(100), GETDATE(), 8)  AS Style8   -- 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 9)  AS Style9   -- Jan 15 2024 10:30:45:123AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 10) AS Style10  -- 01-15-24
SELECT CONVERT(VARCHAR(100), GETDATE(), 11) AS Style11  -- 24/01/15
SELECT CONVERT(VARCHAR(100), GETDATE(), 12) AS Style12  -- 240115
SELECT CONVERT(VARCHAR(100), GETDATE(), 13) AS Style13  -- 15 Jan 2024 10:30:45:123
SELECT CONVERT(VARCHAR(100), GETDATE(), 14) AS Style14  -- 10:30:45:123
-- 15-19 保留/無效
SELECT CONVERT(VARCHAR(100), GETDATE(), 20) AS Style20  -- 2024-01-15 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 21) AS Style21  -- 2024-01-15 10:30:45.123
SELECT CONVERT(VARCHAR(100), GETDATE(), 22) AS Style22  -- 01/15/24 10:30:45 AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 23) AS Style23  -- 2024-01-15
SELECT CONVERT(VARCHAR(100), GETDATE(), 24) AS Style24  -- 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 25) AS Style25  -- 2024-01-15 10:30:45.250
-- 26-31 保留/無效

有世紀位格式實測代碼 (Style 100-131)

SELECT CONVERT(VARCHAR(100), GETDATE(), 100) AS Style100  -- Jan 15 2024 10:30AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 101) AS Style101  -- 01/15/2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 102) AS Style102  -- 2024.01.15
SELECT CONVERT(VARCHAR(100), GETDATE(), 103) AS Style103  -- 15/01/2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 104) AS Style104  -- 15.01.2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 105) AS Style105  -- 15-01-2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 106) AS Style106  -- 15 Jan 2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 107) AS Style107  -- Jan 15, 2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 108) AS Style108  -- 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 109) AS Style109  -- Jan 15 2024 10:30:45:123AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 110) AS Style110  -- 01-15-2024
SELECT CONVERT(VARCHAR(100), GETDATE(), 111) AS Style111  -- 2024/01/15
SELECT CONVERT(VARCHAR(100), GETDATE(), 112) AS Style112  -- 20240115
SELECT CONVERT(VARCHAR(100), GETDATE(), 113) AS Style113  -- 15 Jan 2024 10:30:45:123
SELECT CONVERT(VARCHAR(100), GETDATE(), 114) AS Style114  -- 10:30:45:123
-- 115-119 保留
SELECT CONVERT(VARCHAR(100), GETDATE(), 120) AS Style120  -- 2024-01-15 10:30:45
SELECT CONVERT(VARCHAR(100), GETDATE(), 121) AS Style121  -- 2024-01-15 10:30:45.123
-- 122-125 保留
SELECT CONVERT(VARCHAR(100), GETDATE(), 126) AS Style126  -- 2024-01-15T10:30:45.123
SELECT CONVERT(VARCHAR(100), GETDATE(), 127) AS Style127  -- (保留)
-- 128-129 保留
SELECT CONVERT(VARCHAR(100), GETDATE(), 130) AS Style130  -- 15 جمادى الأولى 1445 10:30:45:123AM
SELECT CONVERT(VARCHAR(100), GETDATE(), 131) AS Style131  -- 15/05/1445 10:30:45:123AM

實戰技巧:格式化並截取日期部分

-- 需求:將 datetime 字段 ss_updatetime 轉為 'YYYY-MM-DD' 格式字符串
SELECT 
    sr_child AS '孩子姓名',
    sr_parents AS '家長姓名',
    ss_updatetime AS '原始時間',
    -- 方法 1: LEFT + CHARINDEX 截取空格前部分 (適用於有空格分隔的格式)
    LEFT(ss_updatetime, CHARINDEX(' ', ss_updatetime) - 1) AS '簡易截取',
    -- 方法 2: CONVERT(120) 固定格式 + SUBSTRING 截取前 10 位 (推薦, 穩健)
    SUBSTRING(CONVERT(CHAR(19), ss_updatetime, 120), 1, 10) AS '標準日期'
FROM dbo.tb_sell_resources, dbo.tb_sell_selldetails
WHERE sr_id = ss_rsid AND ss_qdstate <> 1
ORDER BY ss_updatetime

輔助函數速查

函數語法說明
SUBSTRINGSUBSTRING(expression, start, length)start 從 1 開始;length 為截取長度
LEFTLEFT(expression, length)從左側截取指定長度
CHARINDEXCHARINDEX(substring, expression [, start])返回子串首次出現位置,未找到返回 0
STRSTR(float_expression [, length [, decimal]])數值轉字符串,常用於動態 SQL 拼接 TOP 子句

常用模式速記

  • 標準日期:CONVERT(CHAR(10), GETDATE(), 120) → 2024-01-15 (推薦,ISO 格式,排序友好)
  • 標準日期時間:CONVERT(CHAR(19), GETDATE(), 120) → 2024-01-15 10:30:45
  • 純數字日期:CONVERT(CHAR(8), GETDATE(), 112) → 20240115 (適合文件名、分區鍵)
  • 中文常用:CONVERT(VARCHAR(100), GETDATE(), 111) → 2024/01/15

版本兼容提示

  • Style 126 (ISO8601) 需 SQL Server 2000+。
  • Style 127 保留未用。
  • SQL Server 2008+ 新增 FORMAT() 函數,支持 .NET 格式字符串,更靈活但性能略低於 CONVERT。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved