日期函数

 

ORACLE日期时间函数大全

   TO_DATE格式(以时间:2007-11-02   13:45:25为例)
   
        Year:      
        yy two digits 两位年                显示值:07
        yyy three digits 三位年                显示值:007
        yyyy four digits 四位年                显示值:2007
            
        Month:      
        mm    number     两位月              显示值:11
        mon    abbreviated 字符集表示          显示值:11月,若是英文版,显示nov     
        month spelled out 字符集表示          显示值:11月,若是英文版,显示november 
          
        Day:      
        dd    number         当月第几天        显示值:02
        ddd    number         当年第几天        显示值:02
        dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri
        day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday        
        ddspth spelled out, ordinal twelfth 
             
              Hour:
              hh    two digits 12小时进制            显示值:01
              hh24 two digits 24小时进制            显示值:13
              
              Minute:
              mi    two digits 60进制                显示值:45
              
              Second:
              ss    two digits 60进制                显示值:25
              
              其它
              Q     digit         季度                  显示值:4
              WW    digit         当年第几周            显示值:44
              W    digit          当月第几周            显示值:1
              
        24小时格式下时间范围为: 0:00:00 - 23:59:59....      
        12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 
            
1. 日期和字符转换函数用法(to_date,to_char)
         
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

 

 

日期函数对日期值进行运算,并生成日期数据类型或数值类型的结果
日期函数包括: 

 

ADD_MONTHS(d,n)时间点d再加上n个月

select sysdate ,add_months(sysdate,2) aa from dual;
 
SYSDATE     AA
----------- -----------
2014/9/24 1 2014/11/24
 

 

MONTHS_BETWEEN;用于计算有多少个月

MONTHS_BETWEEN (x, y)用于计算x和y之间有几个月。如果x在日历中比y早,那么MONTHS_BETWEEN()就返回一个负数。
当x 和 y 之间的月份之差不是整月的时候,可以采用小数表示,例如
SELECT MONTHS_BETWEEN('25-MAY-2008', '15-JAN-2008')
FROM dual;
MONTHS_BETWEEN('25-MAY-2008','15-JAN-2008')
4.32258065
months_between(date1, date2),必须注意的是,date1与date2都为Date类型,不然会出现错误。须用to_date(‘’,'') 来转换为日期格式,才能参加计算。

 


LAST_DAY ;last_day是个函数,返回某个时间值的当月最后一天

select last_day(sysdate) from dual;
 
LAST_DAY(SYSDATE)
-----------------
2014/9/30 14:35:5

 


ROUND; ROUND 函数用于把数值字段舍入为指定的小数位数。

 

 

SELECT ROUND(column_name,decimals) FROM table_name
参数 描述
column_name 必需。要舍入的字段。
decimals 必需。规定要返回的小数位数。

 

显示在一个月为30天,所有员工的日薪,忽略余数

select  ename round(sal/30) from emp;


NEXT_DAY

   

next_day(x,y)用于计算x时间后第一个星期y的时间。
例子,当前时间是2011-11-29 下午 03:19:32 星期二:
select next_day(sysdate,"星期三")from dual;
返回的结果是: 2011-11-30 下午 03:19:32

 
TRUNC;函数返回以指定元素格式截去一部分的日期值;

语法

TRUNC(number,[num_digits])
函数语法参数

TRUNC 函数语法具有下列参数:
Number 必需。需要截尾取整的数字。
Num_digits 可选。用于指定取整精度的数字。
Num_digits 的默认值为 0(零)。

 

trunc(sysdate,'yyyy') --返回当年第一天.
trunc(sysdate,'mm') --返回当月第一天.
trunc(sysdate,'d') --返回当前星期的第一天.

 


EXTRACT 

 

 

习题;

EMP表结构:员工编号、员工姓名、职位、上司、入职时间、工资、奖金、部门编号
DEPT 部门表:部门编号、部门名称、部门所在位置(Location)
BOUNS 奖金表:姓名、职务、工资、奖金

1、选择部门30中所有的员工 
      select ename ,deptno from emp where deptno=30 ;

2、列出所有业务人员(CLERK)的姓名,编号,和部门编号。 
     select job,ename,empno,deptno from emp where job = 'CLERK';
 
3、找出佣金高于薪水的员工
     select ename ,sal ,comm from emp where  comm>sal;

4、找出佣金高于薪水60%的员工
         select ename ,sal ,comm from emp where  comm*(1+0.6)>sal;

5、找出部门10中所有的经理和部门20中所有业务员的详细资料
        select ename,sal,job from emp where job='MANAGER' and OR select ename,deptno from emp where job = 'SALESMAN' and 

deptno =30;

6、找出部门10中所有的经理和部门20中所有业务员,既不是经理又不是业务员但薪水大于等于2000的所有的员工信息
              select ename ,sal ,job ,deptno from emp where not job ='MANAGER'and deptno = 10 or not job = 'SALESMAN' and  

deptno =30  and sal> 2000;

7、找出收取佣金的员工的不同工作;
     select ename ,deptno from emp where job in(select job from emp where comm >0);

8、找出收取佣金或收取佣金低于100的员工;
        select ename from emp where comm > 0 and comm<100;

9、找出各月倒数第三天受雇的所有员工。

       select * from emp where hiredate = last_day(hiredate)-2;

10、找出早于81年11月15日之后入职的受雇员工
         select * from emp  where  hiredate<'17-11月 -81'; 

11、以首字母大写方式显示所有的员工姓名;
      select initcap(ename) 姓名 from emp;

12、显示正好为5个字符的员工姓名;
     select ename  from emp where ename like '_____'; 

13、显示不带R的员工姓名
      select ename from emp where ename not like '%R%';
     

14、显示所有员工姓名的前三个字符
      select substr(ename,1,3) ename from emp ;

15、显示所有员工的姓名,用”a”代替所有的“A”
    select replace(ename ,'A','a') ename from emp;

16、显示满10年服务年限的员工姓名和受雇日期
     
       select ename hiredate from emp where months_between(sysdate,hiredate)/12>10;

17、按名字排序员工
   select ename from emp order by ename ;

18、显示员工的姓名,受雇日期,根据服务年限按老员工排列

     select ename,hiredate from emp  order by hiredate ;

19、显示在一个月为30天,所有员工的日薪,忽略余数
    select  ename round(sal/30) from emp;

20、找出在2月份受雇的员工

   select * from emp where to_char(hiredate,'mm')=2;

21、显示每个员工加入公司的天数
      select ename ,round(sysdate-hiredate)days from emp;
         
22、找出名字包含“A”的员工
     select ename from emp where ename like '%A%';

 

 

 

你可能感兴趣的:(oracle,sql,日期函数,查询)