You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中修改日期字段:将指定日期改为当月12日并保留时分秒

Oracle日期转换:将日期改为当月12日并保留时分秒

当然可以轻松实现这个需求!在Oracle里,我们可以通过日期函数的组合来精准完成这个转换,不用绕弯路。

方法一:日期运算(推荐,性能更优)

这种方法直接基于日期类型进行计算,避免字符串转换的开销,是效率最高的方式:

SELECT 
    TRUNC(date_col, 'MM') + 11 + (date_col - TRUNC(date_col)) AS converted_date
FROM your_table;

让我拆解一下每个部分的作用:

  • TRUNC(date_col, 'MM'):把原日期截断到当月第一天(时间部分变为00:00:00),比如15-JAN-2018 07:18:09会变成01-JAN-2018 00:00:00
  • +11:给当月第一天加上11天,正好得到当月12日的00:00:00
  • (date_col - TRUNC(date_col)):原日期减去截断到当天0点的日期,得到的是一个小数(代表当天时分秒占一天的比例),比如07:18:09对应的就是0.304270833天,把这个值加到前面的12日0点上,就完美保留了原有的时分秒信息

方法二:字符串拼接法(更直观)

如果你更喜欢用字符串处理的方式,也可以先提取原日期的时分秒,再和当月12日的日期拼接后转成日期类型:

SELECT 
    TO_DATE(
        TO_CHAR(TRUNC(date_col, 'MM') + 11, 'DD-MON-YYYY') || ' ' || TO_CHAR(date_col, 'HH24:MI:SS'),
        'DD-MON-YYYY HH24:MI:SS'
    ) AS converted_date
FROM your_table;

这个方法的逻辑也很清晰:

  1. 先生成当月12日的日期字符串(比如12-JAN-2018)
  2. 提取原日期的时分秒字符串(比如07:18:09)
  3. 把两个字符串拼接成完整的日期时间字符串,再用TO_DATE转成日期类型

验证结果

用你给出的测试数据,两种方法都会输出你想要的结果:

  • 12-JAN-2018 07:18:09
  • 12-JAN-2018 09:09:19
  • 12-JAN-2018 05:29:21
  • 12-JAN-2018 05:30:26
  • 12-JAN-2018 07:23:19
  • 12-JAN-2018 02:30:12
  • 12-JAN-2018 02:30:12
  • 12-JAN-2018 03:30:12

内容的提问来源于stack exchange,提问作者en Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:35:45