zoukankan      html  css  js  c++  java
  • SQL日期函数

    日期函数提供了常用的日期/时间信息处理功能,比如截断、计算时间差等。Oracle常用日期函数如表4-4所示。
    常用日期函数
    函 数 功 能 用法
    add_months(x, y)    计算在日期x基础上增加y个月后的日期 add_months(sysdate,2)
    last_day(x)          返回日期x当月最后一天的日期 last_day(sysdate)
    months_between(x, y) 返回日期x和y之间相差的月数 months_between(sysdate,hiredate)
    round(x, y)       将日期x四舍五入到y所指定的日期单位(月或年)的第一天 round(sysdate,'month')
    trunc(x, y)                  将日期x截断到y所指定的日期单位(月或年)的第一天 round(sysdate,'year')
    next_day(x, y)            计算指定日期x后的第一个星期几(由参数y指定)对应的日期

    add_months(x, y) 返回在日期/时间x基础上增加y个月后的时间。参数x用于指定起始时间,可以是日期型的常量、字段名或表达式,参数y可以是任意整数。如y值为负数,则返回在日期x基础上减去y个月后的日期/时间;如y值为浮点数,则先将y截断到整数位再进行运算。因此返回值只有年度、月份值可能会发生变化,小时、分、秒的值是不变的。例如:
    SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') t0,
    TO_CHAR(ADD_MONTHS(SYSDATE,2),'yyyy-mm-dd hh24:mi:ss') t1,
    TO_CHAR(ADD_MONTHS(SYSDATE,2.5),'yyyy-mm-dd hh24:mi:ss') t2 FROM DUAL;
    T0 T1 T2
    2014-06-13 14:09:52 2014-08-13 14:09:52 2014-08-13 14:09:52

    last_day(x) 返回日期/时间x当月最后一天的日期/时间,小时、分及秒等时间信息不变,例如
    SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') t0,
    TO_CHAR(LAST_DAY(SYSDATE),'yyyy-mm-dd hh24:mi:ss') t1 FROM DUAL;
    T0 T1
    2014-06-13 14:17:19 2014-06-30 14:17:19

    months_between(x, y) 返回日期x和y之间相差的月数。
    返回值的符号确定原则:如果x小于(早于)y,则返回负数;如果x大于y,则返回正数;如果x等于y,则返回0。
    时间差值的计算规则:如果x和y的“日”相同(比如都是14日)、或者均为月底(比如分别为“3月31日”和“4月30日”),则返回整数;否则Oracle是以31天为基准,计算结果的小数部分,且忽略x和y在小时、分、秒层面的差异。例如:
    SELECT MONTHS_BETWEEN(TO_DATE('2008-12-23 01:23:45','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2008-12-23 15:23:45','yyyy-mm-dd hh24:mi:ss')) t0 FROM DUAL; --日相同,返回整数0
    SELECT MONTHS_BETWEEN(TO_DATE('2008-12-2 01:23:45','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2008-12-4 01:23:45','yyyy-mm-dd hh24:mi:ss')) t0 FROM DUAL; --以31天为基准,忽略时分秒,结果为-2/31
    SELECT MONTHS_BETWEEN(TO_DATE('1989-02-11','yyyy-mm-dd'),TO_DATE('2014-06-13','yyyy-mm-dd')) t0 FROM DUAL ---304.064516129032

    round(x, y) 对日期进行四舍五入操作。参数x用于指定原始日期/时间,参数y用于指定四舍五入的方式——如果y的值为'YEAR',则四舍五入到年度第一天(以7月1日为分界线);如果y的值为'MONTH',则四舍五入到月份第一天(以16日为分界线);如果y的值为'DAY',则四舍五入到天的开始(零点零分零秒,以中午12:00为分界线)。例如:
    SYSDATE TO_CHAR(ROUND(SYSDATE,'DAY'),' ROUND(SYSDATE,'MONTH') ROUND(SYSDATE,'YEAR')
    2014/6/13 15:03:09 2014-06-15 00:00:00 2014/6/1 2014/1/1

    trunc(x, y) 对日期/时间进行进行截断操作,其逻辑类似于数值处理中的向下取整。参数x用于指定原始日期/时间,参数y用于指定截断的方式——如果y的值为'YEAR',则截断到当前年度的第一天;如果y的值为'MONTH',则截断到当前月份的第一天;如果y的值为'DAY',则截断到当天的开始(零点零分零秒)。
    --SELECT TRUNC(SYSDATE,'DAY') FROM DUAL; --2014/6/8
    --SELECT TRUNC(SYSDATE,'YEAR') FROM DUAL; --2014/1/1
    --SELECT TRUNC(SYSDATE,'MONTH') FROM DUAL; --2014/6/1

    next_day(x, y) 返回指定日期/时间之后的第一个“星期几”所对应的日期/时间(其小时、分、秒数值不变)。参数x用于指定原始日期/时间,参数y用于指定星期几,其值可以是整数1~7(依次对应星期日~星期六)、或字符型的'星期一'~'星期日'(中文语言环境)、或者'Mon'~'Sun'(英文语言环境)。星期一 MON 星期二 TUE 星期三 WED 星期四 THU 星期五 FRI 星期六 SAT 星期天 SUN
    SELECT SYSDATE,TO_CHAR(NEXT_DAY(SYSDATE,4),'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
    SYSDATE TO_CHAR(NEXT_DAY(SYSDATE,4),'Y
    2014/6/13 16:04:17 2014-06-18 16:04:17
    SELECT sysdate, to_char(next_day(sysdate,'星期三'),'yyyy-mm-dd hh24:mi:ss') FROM dual;
    SELECT SYSDATE,TO_CHAR(NEXT_DAY(SYSDATE,'Wed'),'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
    --将当前会话语言环境改为简体中文
    ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
    --将当前会话语言环境改为英文
    ALTER SESSION SET NLS_LANGUAGE=american;
    SELECT sysdate, to_char(next_day(sysdate,'Wed'),'yyyy-mm-dd hh24:mi:ss') FROM dual;

  • 相关阅读:
    前端大文件上传方法(深度好文)
    windows版idea 2018.3.5版 永久激活教程
    性能优化随笔
    使用java画一张海报
    Gson杂记录
    Gson转Map时,Int会变成double解决方法
    浅析VO、DTO、DO、PO的概念、区别和用处
    SpringCloud框架搭建+实际例子+讲解+系列五
    raid总结
    MD5与SHA1
  • 原文地址:https://www.cnblogs.com/rusking/p/3788483.html
Copyright © 2011-2022 走看看