Oracle中日期加1天丢失时分且格式变化问题如何解决
问题原因
- 解析格式掩码不匹配:你存储的日期字符串是两位年份(如
21代表2021),之前的写法使用YYYY(对应四位年份)作为解析掩码,会导致年份解析异常。 - 输出格式未显式指定:
TO_TIMESTAMP、TO_DATE转换后得到的是时间戳/日期类型,数据库会按照会话默认的日期格式输出,因此出现格式不符、看起来丢失时分的问题(第二种写法的时分信息实际还存在,只是默认格式未展示)。
正确实现语句
如果接受输出的月、日带前导零(如09/28/21 18:05),使用以下语句:
SELECT TO_CHAR(TO_DATE(col1, 'MM/DD/YY HH24:MI') + 1, 'MM/DD/YY HH24:MI') AS target_col FROM tab1;
如果需要和原始格式一致,去掉月、日的前导零(如9/28/21 18:05),添加FM前缀即可:
SELECT TO_CHAR(TO_DATE(col1, 'MM/DD/YY HH24:MI') + 1, 'FMMM/DD/YY HH24:MI') AS target_col FROM tab1;
补充说明
- 日期加1天直接用
+1即可,语法比INTERVAL '1' DAY更简洁,效果完全一致。 - 建议后续将日期数据存储为
DATE类型而非VARCHAR2,可以避免解析错误、无需额外格式转换即可直接做日期运算,也能通过约束避免非法日期值入库。
内容的提问来源于stack exchange,提问作者Amit Kumar Tyagi
相关产品推荐
相关产品推荐

