zoukankan      html  css  js  c++  java
  • oracle 几个时间函数探究

    近来经常用到时间函数,在此写一个笔记,记录自己的所得,希望也对您有所帮助。

    1、对于一个时间如 sysdate:2015/1/30 14:16:03如何只得到年月日,同时它的数据类型不变化呢?

    最容易想到的是to_char然后在to_date,以前我所能想到的就是这个,因为觉得麻烦在网上搜了一下,找到了另外一种方法,trunc(sysdate),即可得到想要的结果

    select sysdate from dual;
     
    SYSDATE
    -----------
    2015/1/30 1
     
     select to_date(to_char(sysdate,'yyyymmdd'),'yyyymmdd') from dual;
     
    TO_DATE(TO_CHAR(SYSDATE,'YYYYM
    ------------------------------
    2015/1/30
     
     select trunc(sysdate) from dual;
     
    TRUNC(SYSDATE)
    --------------
    2015/1/30
    

    2、有了上面的铺垫在进行下面的时间比对就简单多了

    有这么一个需求,我在每个季度的第一天要修改一笔数据,这笔数据必须是上一季度前十天之前添加的。即:7月1日修改4月10日(包括)之前添加的数据

    这个时候就用到了MONTHS_BETWEEN函数,期初我是这么考虑的,

    如果数据的添加时间是4月10日23点59分59秒,这样和7月1日做运算的结果为:2.67741972

    如果数据的添加时间是4月11日0点0分0秒,这样和7月1日做运算的结果为:2.67741935

    而4月10日与7月10日的运算结果为:2.70967741

    为了确保时间的可控性,想到了使用年月日,去除掉时间的时分秒

    具体代码如下:(使用to_date('20150701','yyyymmdd') 来模拟时间参数)

    select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),to_date('20150410 23:59:59','yyyymmdd HH24:mi:ss')) time from dual;
     
          TIME
    ----------
    2.67741972
     
     select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),to_date('20150411 00:00:00','yyyymmdd HH24:mi:ss')) time from dual;
     
          TIME
    ----------
    2.67741935
     
     select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),to_date('20150410','yyyymmdd')) time from dual;
     
          TIME
    ----------
    2.70967741
    
     select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),trunc(to_date('20150410 15:23:38','yyyymmdd HH24:mi:ss'))) time from dual;
     
          TIME
    ----------
    2.70967741
     
    

     最终不用肯定是使用trunc和months_between两者相结合来完成这个需求了。

    天地何其大,人生何其短。 不困于一时,不困于一世。 且恒且坚,且苦且乐,且行且看。
  • 相关阅读:
    原型模式——浅复制与深复制
    初识Java反射
    建造者模式
    利用事件委托弥补观察者模式不足
    利用Java提供的Observer接口和Observable类实现观察者模式
    观察者模式
    再说单例模式的线程安全问题
    组合模式
    MyBatis3入门
    [Swift]LeetCode1216. 验证回文字符串 III | Valid Palindrome III
  • 原文地址:https://www.cnblogs.com/mozizhu/p/4262372.html
Copyright © 2011-2022 走看看