2个日期相减,得到的结果是相差的天数,

2个日期不能相加。


加减日

select ename,emp.hiredate - 5 from emp;

select ename,emp.hiredate + 5 from emp;

加减月

select ename,add_months(emp.hiredate,5) from emp;

select ename,add_months(emp.hiredate,-5) from emp;

加减年

select ename,add_months(emp.hiredate,5*12) from emp;

select ename,add_months(emp.hiredate,-5*12) from emp;

加减小时

select ename,hiredate + 5/24 from emp order by empno;

select ename,hiredate - 5/24 from emp order by empno;

加减分钟

select ename,hiredate + (5/24/60) from emp;

select ename,hiredate - (5/24/60) from emp;

加减秒

select ename,hiredate + (5/24/60/60) from emp;

select ename,hiredate - (5/24/60/60) from emp;



计算两个日期之间的天数

        要点:先查询出2个日期,然后在select子句中直接计算,得到的结果是相差的天数

select a.hiredate - b.hiredate

from

(

  select hiredate from emp where ename = 'ALLEN'

) a,

(

  select hiredate from emp where ename = 'WARD'

) b;


确定两个日期之间的月份数或年数

年数除以12即可

select round(months_between(a.hiredate,b.hiredate))

from

(

  select hiredate from emp where ename = 'JONES'

) a,

(

  select hiredate from emp where ename = 'WARD'

) b;


找到月的最后一天

select last_day(emp.hiredate) from emp;

找到年的第一天

select trunc(sysdate,'yyyy') from dual;


从日期中提取时间部分

select to_char(sysdate,'hh24') hour,  --获得小时(24小时制)

       to_char(sysdate,'mi') min,                 --获得分钟

       to_char(sysdate,'ss') sec,                 --获得秒

       to_char(sysdate,'dd') day,                 --获得日期(天)

       to_char(sysdate,'mm') mth,         --获得月

       to_char(sysdate,'yyyy') year     --获得年

from dual;


从日期中截取部分

select trunc(hiredate,'yyyy') from emp;  --截断到年

select trunc(hiredate,'mm') from emp;     --截断到月


Round函数对日期进行“四舍五入”,Trunc函数对日期进行截取。如果我们不指定格式的话,Round会返回一个最接近date参数的日期,而Trunc函数只会简单的截取时分秒部分,返回年月日部分。


求2个日期之间的间隔

select numtoyminterval(months_between(dt2,dt1),'month') years_month,

numtodsinterval(dt2-add_months(dt1,trunc(months_between(dt2,dt1))),'day') day_hours

from (select to_date('2009-12-10','yyyy-mm-dd') dt1,to_date('2008-12-8','yyyy-mm-dd') dt2 from dual);



纵向拼接:

函数:decode(列名,'值1','结果1','值2','结果2','默认结果')

示例:

SELECT decode(1, 2, '你好') FROM dual;

SELECT job, decode(job,'CLERK','普通职员','SALESMAN','销售人员', '未知职位') FROM emp;


数据库通用case语法:

示例代码:


【--case when 语法

SELECT

  CASE empno

   WHEN 7369 THEN '斯密斯'

   ELSE '无名氏'

  END

FROM emp;


SELECT

  xingming,

  MAX(

  CASE xueke

    WHEN '语文' THEN chengji

  END) 语文,

  MAX(

  CASE xueke

    WHEN '数学' THEN chengji

  END) 数学,

  MAX(

  CASE xueke

    WHEN '英语' THEN chengji

  END) 英语

FROM cj GROUP BY xingming;


--CASE WHEN...语法2

SELECT

  CASE

  WHEN empno = 7369 THEN '斯密斯'

  END

FROM emp;