好的,阿杰,我们来详细讲解 Oracle 中 TO_DATE 函数 的用法,包括概念、常用格式、示例以及注意事项。


1️⃣ TO_DATE 函数概念

  • 作用:将 字符串 转换为 日期类型 (DATE)
  • 常用于:
    • 将用户输入的字符串转为日期
    • 插入或比较日期字段
  • 语法:
TO_DATE(char, 'format_model', 'nls_language')
参数说明
char要转换的字符串
format_model日期格式模板,如 'YYYY-MM-DD HH24:MI:SS'
nls_language可选,指定语言环境(如月份英文/中文)

2️⃣ 常用日期格式模板

格式含义示例
YYYY / YY2025 / 25
MM / MON / MONTH08 / AUG / AUGUST
DD20
HH2424小时制小时14
HH1212小时制小时2
MI分钟30
SS45
AM / PM上午/下午PM

注意:MM 是数字月份,MON 是缩写英文月份,MONTH 是完整英文月份。


3️⃣ 基本示例

3.1 字符串转日期

SELECT TO_DATE('2025-08-20', 'YYYY-MM-DD') FROM dual;

结果:

20-AUG-25

3.2 带时间转换

SELECT TO_DATE('2025-08-20 14:30:45', 'YYYY-MM-DD HH24:MI:SS') FROM dual;

结果:

20-AUG-25 14:30:45

3.3 中文月份格式

SELECT TO_DATE('20-八月-2025', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=SIMPLIFIED CHINESE') FROM dual;
  • NLS_DATE_LANGUAGE 指定中文环境
  • 支持中文月份、AM/PM 等语言特定格式

4️⃣ 实际使用场景示例

4.1 插入日期字段

INSERT INTO orders (order_id, order_date)
VALUES (1, TO_DATE('2025-08-20 09:30:00', 'YYYY-MM-DD HH24:MI:SS'));

4.2 日期比较查询

SELECT *
FROM orders
WHERE order_date >= TO_DATE('2025-08-01', 'YYYY-MM-DD')
  AND order_date < TO_DATE('2025-09-01', 'YYYY-MM-DD');

4.3 与字符串组合

SELECT '订单日期:' || TO_CHAR(TO_DATE('2025-08-20', 'YYYY-MM-DD'), 'YYYY年MM月DD日') AS info
FROM dual;
  • 先用 TO_DATE 转换,再用 TO_CHAR 格式化输出

5️⃣ 注意事项

  1. 格式模板必须与字符串匹配-- 错误示例 TO_DATE('2025/08/20', 'YYYY-MM-DD') -- 分隔符不匹配
    • 正确:
    TO_DATE('2025/08/20', 'YYYY/MM/DD')
  2. 24小时制 vs 12小时制
    • HH24 用于 24 小时
    • HH12 + AM/PM 用于 12 小时制
  3. NLS_DATE_FORMAT 影响显示
    • TO_DATE 本身不影响显示格式,只影响存储
    • 显示格式由 TO_CHAR 或会话 NLS_DATE_FORMAT 决定
  4. 常用组合
    • 'YYYY-MM-DD HH24:MI:SS' → 精确到秒
    • 'YYYYMMDD' → 简洁数字型日期
    • 'DD-MON-YYYY' → Oracle 默认英文格式