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;
这个方法的逻辑也很清晰:
- 先生成当月12日的日期字符串(比如
12-JAN-2018) - 提取原日期的时分秒字符串(比如
07:18:09) - 把两个字符串拼接成完整的日期时间字符串,再用
TO_DATE转成日期类型
验证结果
用你给出的测试数据,两种方法都会输出你想要的结果:
12-JAN-2018 07:18:0912-JAN-2018 09:09:1912-JAN-2018 05:29:2112-JAN-2018 05:30:2612-JAN-2018 07:23:1912-JAN-2018 02:30:1212-JAN-2018 02:30:1212-JAN-2018 03:30:12
内容的提问来源于stack exchange,提问作者en Lopes
相关产品推荐
相关产品推荐

