在 Oracle 数据库中,可以使用 TO_CHAR 和 TO_DATE 等函数对日期和时间进行格式化。以下是详细说明:
1. 日期转字符串(格式化日期)
使用 TO_CHAR 将 日期类型(DATE 或 TIMESTAMP)格式化为 字符串:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM dual;
常见格式符号:
| 格式符 | 说明 | 示例(2025年2月6日 15:30:45) | 
|---|---|---|
| YYYY | 四位数年份 | 2025 | 
| YY | 两位数年份 | 25 | 
| MM | 两位数月份 | 02 | 
| MON | 三个字母的月份缩写 | FEB | 
| MONTH | 全称月份(自动填充空格) | FEBRUARY | 
| DD | 两位数的日期 | 06 | 
| D | 一周中的第几天(1-7) | 5(周四) | 
| DAY | 星期几(填充空格) | THURSDAY | 
| DY | 星期几缩写 | THU | 
| HH24 | 24小时制小时 | 15 | 
| HH | 12小时制小时 | 03 | 
| MI | 分钟 | 30 | 
| SS | 秒 | 45 | 
| AM/PM | 上午/下午 | PM | 
示例
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH:MI:SS AM') FROM dual;
-- 2025/02/06 03:30:45 PM
2. 字符串转日期(解析字符串)
使用 TO_DATE 将 字符串 转换为 日期类型:
SELECT TO_DATE('2025-02-06 15:30:45', 'YYYY-MM-DD HH24:MI:SS') FROM dual;
Oracle 默认格式 可能是 DD-MON-YY,如 06-FEB-25。
如果想存入 TIMESTAMP:
SELECT TO_TIMESTAMP('2025-02-06 15:30:45.123', 'YYYY-MM-DD HH24:MI:SS.FF3') FROM dual;
FF3 代表毫秒,可用 FF6 表示微秒。
3. 其他常见日期函数
| 函数 | 说明 | 示例 | 
|---|---|---|
| SYSDATE | 获取当前日期时间( DATE类型) | SELECT SYSDATE FROM dual; | 
| SYSTIMESTAMP | 获取带时区的当前时间( TIMESTAMP类型) | SELECT SYSTIMESTAMP FROM dual; | 
| CURRENT_DATE | 获取当前会话时区的日期 | SELECT CURRENT_DATE FROM dual; | 
| ADD_MONTHS | 增加/减少月份 | SELECT ADD_MONTHS(SYSDATE, 3) FROM dual; | 
| TRUNC | 截断日期(如取整到天) | SELECT TRUNC(SYSDATE, 'MM') FROM dual; | 
| ROUND | 取整日期(如四舍五入到最近的月) | SELECT ROUND(SYSDATE, 'MM') FROM dual; | 
4. 时间计算
计算 两个日期的间隔(天/小时/分钟):
SELECT (TO_DATE('2025-02-10', 'YYYY-MM-DD') - TO_DATE('2025-02-06', 'YYYY-MM-DD')) AS days_diff FROM dual;
-- 结果: 4(天数差)
计算 小时、分钟、秒差:
SELECT (TO_DATE('2025-02-06 18:00:00', 'YYYY-MM-DD HH24:MI:SS') 
       - TO_DATE('2025-02-06 15:30:00', 'YYYY-MM-DD HH24:MI:SS')) * 24 AS hours_diff FROM dual;
-- 结果: 2.5(小时差)
总结
- TO_CHAR:日期转字符串(格式化显示)
- TO_DATE:字符串转日期(解析)
- SYSDATE/- SYSTIMESTAMP:获取当前时间
- 日期计算时,Oracle 的 DATE默认包含 时分秒
- 时间计算时,直接相减得到天数,乘以 24 转换为小时





 苏公网安备32021302001419号
苏公网安备32021302001419号