核心函數:CONVERT
CONVERT(data_type[(length)], expression[, style])
style:日期格式代碼,決定輸出字符串格式
- 加 100 可獲得四位年份(yyyy),如 1→101,12→112
獲取當前時間
GETDATE() -- 返回 datetime,如 2008-05-16 10:57:46.827
完整格式代碼速查表
| 代碼 | 輸出示例 | 標準/說明 |
| 0/100 | May 16 2008 10:57AM | 默認,mon dd yyyy hh:miAM |
| 1/101 | 05/16/2008 | 美國 mm/dd/yyyy |
| 2/102 | 2008.05.16 | ANSI yy.mm.dd |
| 3/103 | 16/05/2008 | 英/法 dd/mm/yyyy |
| 4/104 | 16.05.2008 | 德國 dd.mm.yyyy |
| 5/105 | 16-05-2008 | 意大利 dd-mm-yyyy |
| 6/106 | 16 May 08 | dd mon yy |
| 7/107 | May 16, 08 | mon dd, yy |
| 8/108 | 10:57:46 | hh:mi:ss |
| 9/109 | May 16 2008 10:57:46:827AM | 默認+毫秒 |
| 10/110 | 05-16-2008 | 美國 mm-dd-yyyy |
| 11/111 | 2008/05/16 | 日本 yyyy/mm/dd |
| 12/112 | 20080516 | ISO yymmdd/yyyymmdd |
| 13/113 | 16 May 2008 10:57:46:937 | 歐洲默認+毫秒(24h) |
| 14/114 | 10:57:46:967 | hh:mi:ss:mmm(24h) |
| 20/120 | 2008-05-16 10:57:47 | ODBC 標準 yyyy-mm-dd hh:mi:ss |
| 21/121 | 2008-05-16 10:57:47.157 | ODBC+毫秒 |
| 126 | 2008-05-16T10:57:49.827 | ISO8601 無空格 |
| 130 | 18 ??? 1427 10:57:49:907AM | Hijri 科威特算法 |
高頻實用格式推薦
- 標準日期時間:
CONVERT(varchar, GETDATE(), 120) → 2024-01-15 14:30:45
- 純日期:
CONVERT(varchar, GETDATE(), 23) → 2024-01-15
- 純時間:
CONVERT(varchar, GETDATE(), 108) → 14:30:45
- 文件名安全:
CONVERT(varchar, GETDATE(), 112) → 20240115
- ISO8601/API交換:
CONVERT(varchar, GETDATE(), 126) → 2024-01-15T14:30:45.123
進階技巧
- 截取日期部分:
CONVERT(date, GETDATE()) 或 CAST(GETDATE() AS date)
- 自定義格式:
FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss', 'zh-CN') (SQL 2012+)
- 兩位年份截止年份配置:
sp_configure 'two digit year cutoff', 2030
避坑指南
- 字符串長度不足會截斷:
varchar(10) 只能裝下 yyyy-mm-dd
smalldatetime 精度僅到分鐘,秒/毫秒會歸零
- 隱式轉換依賴語言/日期格式設置,永遠顯式指定 style