好的,阿杰,我们来详细讲解 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 / YY | 年 | 2025 / 25 |
MM / MON / MONTH | 月 | 08 / AUG / AUGUST |
DD | 日 | 20 |
HH24 | 24小时制小时 | 14 |
HH12 | 12小时制小时 | 2 |
MI | 分钟 | 30 |
SS | 秒 | 45 |
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️⃣ 注意事项
- 格式模板必须与字符串匹配
-- 错误示例 TO_DATE('2025/08/20', 'YYYY-MM-DD') -- 分隔符不匹配
- 正确:
TO_DATE('2025/08/20', 'YYYY/MM/DD')
- 24小时制 vs 12小时制
HH24
用于 24 小时HH12
+AM/PM
用于 12 小时制
- NLS_DATE_FORMAT 影响显示
TO_DATE
本身不影响显示格式,只影响存储- 显示格式由
TO_CHAR
或会话NLS_DATE_FORMAT
决定
- 常用组合:
'YYYY-MM-DD HH24:MI:SS'
→ 精确到秒'YYYYMMDD'
→ 简洁数字型日期'DD-MON-YYYY'
→ Oracle 默认英文格式
发表回复