歷史數據日期格式混亂:2000-1-1、2000-01-1、2000-1-01,需統一為 YYYY-MM-DD。
PL/SQL 循環 + 大量 IF-ELSIF-ELSE 判斷長度、補零,代碼冗長難維護。
UPDATE lz__eq_rhgl lzrh
SET ls__sp_ghtime = SUBSTR(lz__sp_ghtime, 1, 5) || '0' || SUBSTR(lz__sp_ghtime, 6, 2) || '0' || SUBSTR(lz__sp_ghtime, 8, 1)
WHERE REGEXP_LIKE(lz__sp_ghtime, '^\d{4}-\d{1}-\d{1}$');
REGEXP_LIKE(col, '^\d{4}-\d{1}-\d{1}$'):精準匹配「年-一位月-一位日」格式。SUBSTR(...,1,5) 取 2000-;||'0'||SUBSTR(...,6,2) 補零月份;同理補零日期。\d{4}-\d{2}-\d{1}、\d{4}-\d{1}-\d{2} 的兩條補充 UPDATE,三條合併即可覆蓋所有非標準格式。| 模式 | 匹配示例 | 用途 |
|---|---|---|
^\d{4}-\d{2}-\d{2}$ | 2000-01-01 | 標準格式校驗 |
^\d{4}-\d{1,2}-\d{1,2}$ | 2000-1-1 / 2000-01-1 | 鬆散匹配 |
^\d{4}/\d{1,2}/\d{1,2}$ | 2000/1/1 | 斜槓分隔 |
^\d{8}$ | 20000101 | 無分隔符 |