Oracle数据库提供了多种函数来处理日期和时间数据的格式转换。以下是一些常用的日期格式转换方法和函数:
TO_CHAR
函数用于将日期或时间戳转换为指定格式的字符串:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
-- 结果示例:2023-11-15 14:30:45
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY') FROM dual;
-- 结果示例:15-NOV-2023
TO_DATE
函数用于将字符串转换为日期类型:
SELECT TO_DATE('2023-11-15', 'YYYY-MM-DD') FROM dual;
SELECT TO_DATE('15-Nov-2023 14:30', 'DD-Mon-YYYY HH24:MI') FROM dual;
格式元素 | 说明 | 示例 |
---|---|---|
YYYY | 4位年份 | 2023 |
YY | 2位年份 | 23 |
MM | 月份(01-12) | 11 |
MON | 月份的缩写 | NOV |
MONTH | 月份的全名 | NOVEMBER |
DD | 月中的日(01-31) | 15 |
D | 周中的日(1-7) | 4 |
DY | 星期的缩写 | WED |
DAY | 星期的全名 | WEDNESDAY |
HH | 小时(01-12) | 02 |
HH24 | 小时(00-23) | 14 |
MI | 分钟(00-59) | 30 |
SS | 秒(00-59) | 45 |
FF | 毫秒(1-9位) | 123456 |
EXTRACT - 提取日期部分
SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual;
SELECT EXTRACT(MONTH FROM SYSDATE) FROM dual;
TRUNC - 截断日期
SELECT TRUNC(SYSDATE) FROM dual; -- 去掉时间部分
SELECT TRUNC(SYSDATE, 'MM') FROM dual; -- 截取到月初
ADD_MONTHS - 增加月份
SELECT ADD_MONTHS(SYSDATE, 3) FROM dual; -- 3个月后的日期
LAST_DAY - 获取月份最后一天
SELECT LAST_DAY(SYSDATE) FROM dual;
SELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), 'UTC') AT TIME ZONE 'America/New_York'
FROM dual;
Oracle使用NLS_DATE_FORMAT参数定义默认日期格式:
-- 查看当前会话的日期格式
SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT';
-- 修改当前会话的日期格式
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
掌握这些日期格式转换函数和技巧,可以灵活处理Oracle数据库中的日期和时间数据。