Oracle 时间格式化
Oracle 中主要使用 TO_CHAR 和 TO_DATE 函数来进行时间格式化操作。
TO_CHAR:日期转字符串
将日期类型转换为指定格式的字符串:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
-- 结果示例:2026-06-29 10:13:28
TO_DATE:字符串转日期
将字符串按指定格式解析为日期类型:
SELECT TO_DATE('2026-06-29 10:13:28', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
常用格式元素
| 格式元素 | 含义 | 示例 |
|---|---|---|
YYYY | 四位年份 | 2026 |
YY | 两位年份 | 26 |
MM | 月份(01-12) | 06 |
DD | 日(01-31) | 29 |
HH24 | 24小时制小时 | 14 |
HH12 | 12小时制小时 | 02 |
MI | 分钟(00-59) | 30 |
SS | 秒(00-59) | 45 |
FF | fractional seconds(小数秒) | 123000 |
DAY | 星期全名 | 星期一 |
DY | 星期缩写 | 周一 |
D | 星期数字(1-7) | 1 |
Q | 季度(1-4) | 2 |
WW | 年内第几周 | 26 |
W | 月内第几周 | 4 |
AM/PM | 上午/下午标识 | AM |
常见用法示例
获取当前时间各种格式
-- 年月日
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;
-- 年月日时分秒
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
-- 年月日(无分隔符)
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;
-- 带中文
SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日"') FROM DUAL;
-- 结果:2026年06月29日
日期计算与格式化
-- 当前时间加1天
SELECT TO_CHAR(SYSDATE + 1, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
-- 当前时间加1小时
SELECT TO_CHAR(SYSDATE + 1/24, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
-- 当前时间加1分钟
SELECT TO_CHAR(SYSDATE + 1/24/60, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
获取时间差(秒)
SELECT (TO_DATE('2026-06-29 12:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2026-06-29 10:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 3600
FROM DUAL;
-- 结果:7200(秒)
修改会话默认日期格式
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT SYSDATE FROM DUAL;
-- 直接输出:2026-06-29 10:13:28
注意事项
MI不是mm:Oracle 中分钟用MI,MM表示月份,大小写敏感。HH24vsHH12:24小时制用HH24,12小时制用HH12,后者需配合AM/PM使用。RRvsYY:RR格式会根据当前年份自动推断世纪(如 25 → 2025,95 → 1995),YY则固定补 2000。- 时区处理:如需处理时区,可使用
FROM_TZ、AT TIME ZONE等函数,或查询SYSTIMESTAMP(带时区的当前时间戳)。

2918

被折叠的 条评论
为什么被折叠?



