SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
-- 结果:2023-11-15 14:30:45
SELECT TO_DATE('2023-11-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS') FROM dual;
格式元素 | 说明 | 示例 |
---|---|---|
YYYY | 4位年份 | 2023 |
YY | 2位年份 | 23 |
MM | 月份(01-12) | 11 |
MON | 月份缩写 | NOV |
MONTH | 月份全称 | NOVEMBER |
DD | 月中的日(01-31) | 15 |
D | 周中的日(1-7) | 3 (星期三) |
DY | 星期缩写 | WED |
DAY | 星期全称 | WEDNESDAY |
HH24 | 24小时制(00-23) | 14 |
HH | 12小时制(01-12) | 02 |
MI | 分钟(00-59) | 30 |
SS | 秒(00-59) | 45 |
FF | 毫秒 | 123 |
AM/PM | 上午/下午 | PM |
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS current_datetime FROM dual;
SELECT TO_CHAR(SYSDATE, 'Q') AS quarter FROM dual; -- 1-4表示季度
SELECT TO_CHAR(SYSDATE, 'WW') AS week_of_year FROM dual; -- 1-53
SELECT TO_CHAR(SYSDATE, 'IW') AS iso_week FROM dual; -- ISO标准周数(1-52/53)
SELECT TO_CHAR(SYSDATE, 'Day, Month DD, YYYY "at" HH24:MI:SS')
AS formatted_date FROM dual;
-- 结果:Wednesday, November 15, 2023 at 14:30:45
SELECT TO_DATE('15-Nov-2023', 'DD-Mon-YYYY') FROM dual;
SELECT TO_CHAR(SYSDATE + 7, 'YYYY-MM-DD') AS next_week FROM dual;
SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_DATE_FORMAT';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
ALTER SYSTEM SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' SCOPE=SPFILE;
-- 修改后需要重启数据库生效
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3') FROM dual;
-- 结果:2023-11-15 14:30:45.123
SELECT TO_TIMESTAMP('2023-11-15 14:30:45.123', 'YYYY-MM-DD HH24:MI:SS.FF3') FROM dual;
原因:月份格式不匹配 解决方案:
-- 错误示例
SELECT TO_DATE('15-11-2023', 'DD-MM-YYYY') FROM dual; -- 月份格式应为数字
-- 正确示例
SELECT TO_DATE('15-Nov-2023', 'DD-Mon-YYYY') FROM dual; -- 或使用数字月份
原因:格式字符串与输入字符串不匹配 解决方案:
-- 错误示例
SELECT TO_DATE('2023-11-15 14:30:45', 'YYYY-MM-DD') FROM dual;
-- 正确示例
SELECT TO_DATE('2023-11-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS') FROM dual;
解决方案:
SELECT FROM_TZ(CAST(TO_DATE('2023-11-15 14:30:45', 'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP), 'UTC')
AT TIME ZONE 'America/New_York' FROM dual;
SELECT EXTRACT(YEAR FROM SYSDATE) AS year,
EXTRACT(MONTH FROM SYSDATE) AS month,
EXTRACT(DAY FROM SYSDATE) AS day
FROM dual;
SELECT (TO_DATE('2023-12-31', 'YYYY-MM-DD') - TO_DATE('2023-11-15', 'YYYY-MM-DD')) AS days_diff FROM dual;
SELECT SYSDATE + INTERVAL '1' YEAR AS next_year,
SYSDATE + INTERVAL '3' MONTH AS next_quarter,
SYSDATE + INTERVAL '7' DAY AS next_week
FROM dual;
希望本教程能帮助您掌握Oracle数据库中的时间格式调整方法。根据实际需求选择合适的格式函数和格式元素,可以灵活处理各种日期时间数据。