Oracle 数据库中,可以使用 TO_CHARTO_DATE 等函数对日期和时间进行格式化。以下是详细说明:

1. 日期转字符串(格式化日期)

使用 TO_CHAR日期类型DATETIMESTAMP)格式化为 字符串

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
HH2424小时制小时15
HH12小时制小时03
MI分钟30
SS45
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 转换为小时