数据库日期函数

日期函数:解决闰年,计算准确的问题;

想要进行日期的操作必须知道当前日期:可以使用SYSDATE伪列取得当前日期。

1.      ADD_MONTHS(日期,数字):在指定的日期上加入指定月数,求出新的日期;

2.      MONTHS_BETWEEN(日期1,日期2):求出两个日期间的雇拥月数;

3.      NEXT_DAY(日期,星期数):求出下个日期的最后一天日期;

4.      LAST_DAY(日期):求出限定日期月的最后天日期;

5.      EXTRACT(格式FROM数据):日期时间分割,或计算限定两个日期的间隔;

伪列:不是表中的列,但是可以在查询中使用;

         SELECTSYSDATE

FROM dual;

查询当前日期操作:

         1.ALTERSESSION SET NLS_DATE_FORMAT=’yyyy-mm-dd hh24:mi:ss’;(修改语言环境)

2.SELECT SYSDATEFROM dual;

日期操作公式:

         日期-数字(天数)=日期

         日期+数字(天数)=日期    

日期-日期=数字(天数):没有日期+日期;

范例操作:

         SELECT

SYSDATE - 3 前三天,

SYSDATE + 3 后三天

FROM dual;

1.      查出每个雇员到今天为止雇佣天数,以及十天前每个雇员的雇佣天数:

SELECT

  empno 雇员编号,

  ename 雇员名称,

  TRUNC(SYSDATE-hiredate) 雇佣天数,

  TRUNC((SYSDATE-10)-hiredate) 十天前的雇拥天数

FROM emp;     

2.      验证ADD_MONTHS()函数:

SELECT SYSDATE,

ADD_MONTHS(SYSDATE,3) 三个月之后的日期

ADD_MONTHS(SYSDATE,-3) 三个月之前的日期

FROM dual;

3.      验证NEXT_DAY()函数:

SELECT SYSDATE,

  NEXT_DAY(SYSDATE,'星期日') 下一个星期日的日期,

  NEXT_DAY(SYSDATE,'星期一') 下个星期一的日期

FROM dual;

4.      验证LAST_DAY()函数:

SELECT

 LAST_DAY(SYSDATE)

FROM dual;

         查询所有是在其雇拥所在月的倒数第三天被公司雇拥的雇员信息:

         SELECTempno,ename,job,hiredate,LAST_DAY(hiredate)

FROM emp

WHERELAST_DAY(hiredate)-2=hiredate;

5.      MONTHS_BETWEEN()函数:

查询每个雇员的编号,姓名,雇拥日期,雇拥的月数及年份:

SELECT

       empno,

       ename,

       hiredate,

       TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate))雇拥总月数,

       TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12)雇拥总年份

FROMemp;

查询每个雇员的编号,姓名,雇佣日期,已雇佣的多年份零多少个月零几天:

SELECTempno,ename,hiredate,

    TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 雇佣的年份,

   TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 雇佣的月份,

    TRUNC(SYSDATE - ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate)))雇佣的天数

FROM emp;

6.      EXTRACT()函数:

分离日期“2017-02-01”:

SELECT

  EXTRACT(YEAR FROM DATE '2017-02-01') YEARS,

  EXTRACT(MONTH FROM DATE '2017-02-01') MONTHS,

  EXTRACT(DAY FROM DATE '2017-02-01') DAYS

FROM dual;

取得时间的毫秒:

SELECT

 SYSDATE, SYSTIMESTAMP

FROM dual;

取得更详细的时间:

SELECT

  EXTRACT(YEAR FROM SYSTIMESTAMP) YEARS,

  EXTRACT(MONTH FROM SYSTIMESTAMP) MONTHS,

  EXTRACT(DAY FROM SYSTIMESTAMP) DAYS,

  EXTRACT(HOUR FROM SYSTIMESTAMP) HUORS,

  EXTRACT(MINUTE FROM SYSTIMESTAMP) MINUTES,

  EXTRACT(SECOND FROM SYSTIMESTAMP) SECONDS

FROM dual;

7.      转换函数TO_TIMESTAMP(),可以将字符串变为时间戳:

SELECT

  TO_TIMESTAMP('2015-02-1612:13:14','yyyy-mm-dd hh24:mi:ss'),

  TO_TIMESTAMP('2018-02-15 13:14:15','yyyy-mm-dd hh24:mi:ss')

FROM dual;

求得两个时间的间隔天数:

SELECT

 EXTRACT(DAY FROM TO_TIMESTAMP('2015-02-16 12:13:14','yyyy-mm-ddhh24:mi:ss')-

 TO_TIMESTAMP('2012-02-15 13:14:15', 'yyyy-mm-dd hh24:mi:ss')) DAYS

FROM dual;

运用子查询查询分秒:

SELECT

 EXTRACT(DAY FROM TO_TIMESTAMP('1982-08-13 12:17:57','yyyy-mm-ddhh24:mi:ss')-

 TO_TIMESTAMP('1981-09-27 09:08:33', 'yyyy-mm-dd hh24:mi:ss')) DAYS,

 EXTRACT(HOUR FROM DATETIME_ONE - DATETIME_TWO) HOURS,

 EXTRACT(MINUTE FROM DATETIME_ONE - DATETIME_TWO) MINUTES,

 EXTRACT(SECOND FROM DATETIME_ONE - DATETIME_TWO) SECONDS

 

FROM (

 SELECT TO_TIMESTAMP('1982-08-13 12:17:57','yyyy-mm-dd hh24:mi:ss')DATETIME_ONE,

        TO_TIMESTAMP('1981-09-27 09:08:33', 'yyyy-mm-dd hh24:mi:ss')DATETIME_TWO

 FROM dual);

 

你可能感兴趣的:(数据库学习)