首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 10g 正則表達式統一日期格式:REGEXP_LIKE 實戰

     編輯:Oracle 資料庫相關知識

問題

歷史數據日期格式混亂: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,三條合併即可覆蓋所有非標準格式。

擴展:常用日期正則模式

性能提示

  • 正則掃描全表,大表建議加上分區鍵或業務鍵縮小範圍。
  • 10g 引入 REGEXP_LIKE/INSTR/SUBSTR/REPLACE,11g+ 增強 REGEXP_COUNT,可直接在 SQL 完成複雜清洗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式匹配示例用途
^\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無分隔符