在 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 转换为小时