MySQL 中使用 STR_TO_DATE(str, format) 將符合指定格式的字符串轉換為 DATE、DATETIME 或 TIME 類型。這在導入異構數據、ETL 清洗、動態構建查詢條件等場景極為常用。
某業務表 T_TGS_ALARMED 的 BJSJ (報警時間) 字段為 DATETIME 類型,需插入格式為 'dd-MM-yyyy HH:mm:ss' 的字符串:
INSERT INTO T_TGS_ALARMED (
XH, HPZL, HPHM, BJSJ, BJLX, BJYY, KKID, DDBH, FXBH, CDBH, CLBJ, CJJG, CLRQ, CLRY, CLYJ, GXSJ, BZ
) VALUES (
'1603291112277032122172442', '01', '魯N89728',
STR_TO_DATE('29-03-2016 16:28:44', '%d-%m-%Y %H:%i:%s'),
'8', '黃牌車輛在該路段上禁止行駛!', '201409021080', '201409021079', '02', 1, '0', '371400000000',
NULL, NULL, NULL,
STR_TO_DATE('29-03-2016 16:28:44', '%d-%m-%Y %H:%i:%s'),
NULL
);
| 符號 | 含義 | 示例輸出 |
|---|---|---|
| %Y | 年份,4 位數字 | 2016 |
| %y | 年份,2 位數字 | 16 |
| %m | 月份,數字 (01~12) | 03 |
| %c | 月份,數字 (1~12) | 3 |
| %d | 月內天數 (01~31) | 29 |
| %e | 月內天數 (1~31) | 29 |
| %H | 小時,24 制 (00~23) | 16 |
| %k | 小時,24 制 (0~23) | 16 |
| %h / %I | 小時,12 制 (01~12) | 04 |
| %l | 小時,12 制 (1~12) | 4 |
| %i | 分鐘 (00~59) | 28 |
| %S / %s | 秒 (00~59) | 44 |
| %p | AM 或 PM | PM |
| %r | 12 制時間 (hh:mm:ss AM/PM) | 04:28:44 PM |
| %T | 24 制時間 (hh:mm:ss) | 16:28:44 |
| %W | 星期全稱 | Tuesday |
| %a | 星期縮寫 | Tue |
| %w | 星期索引 (0=Sunday ~ 6=Saturday) | 2 |
| %U | 周數 (00~53),Sunday 為周首 | 13 |
| %u | 周數 (00~53),Monday 為周首 | 13 |
| %j | 年內天數 (001~366) | 089 |
| %b | 月份縮寫 | Mar |
| %% | 字面字符 % | % |
format 不一致會返回 NULL 並產生 Warning,可用 SHOW WARNINGS; 排查。DATE_FORMAT() 反向操作:日期 → 字符串用 DATE_FORMAT(date, format)。STR_TO_DATE 不涉及時區轉換,單純按字面解析。DATETIME,減少數據庫 CPU 開銷。STR_TO_DATE 是 MySQL 處理非標準日期字符串的利器,掌握上述格式符即可應對 99% 的業務場景。建議將速查表收藏備用,遇到「日期格式不匹配」報錯時快速對照修正。