02-Oracle综合练习

字符串函数可以针对于字符串数据进行处理,在Oracle之中对于此类函数定义有如下几种:UPPER()LOWER()INITCAP()REPLACE()LENGTH()SUBSTR()

大小写转换函数

         · 转大写函数:字符串 UPPER ( | 字符串)

         · 转小写函数:字符串 LOWER ( | 字符串)

 

首字母大写;

         · 语法:字符串 INITCAP ( | 数据)

 

计算字符串长度

         · 语法:数字 LENGTH ( | 字符串数据)

 

字符串替换,可以使用指定的内容替换掉原始字符串中的数据。

         · 语法:字符串 REPLACE ( | 数据,要查找内容,新的内容)

 

字符串截取

         · 语法一:字符串 SUBSTR( | 数据,开始点),从指定的开始点一直截取到结尾;

         · 语法二:字符串 SUBSTR( | 数据,开始点,长度):截取指定范围的子字符串。

 

实际上对于日期时间提供有以下三种计算模式:

                   · 日期 + 数字 = 日期(若干天之后的日期);

                   · 日期 - 数字 = 日期(若干之前的日期)

                   · 日期 - 日期 = 数字(两个日期间的天数)

· 语法:数字 MONTHS_BETWEEN(日期1,日期2)

 

转换函数一共提供有三种TO_CHAR()TO_DATE()TO_NUMBER()

 

转字符串函数,数字或者是日期可以转换为字符串。

         · 语法:字符串 TO_CHAR( | 日期 | 数字,转换格式)

         · 对于转换格式而言主要有两类格式:

                   |- 日期转换为字符串:年(yyyy)、月(mm)、日(dd)、时(hhhh24)、分(mi)、秒(ss);

                   |- 数字转换为字符串:任意的一位数字(9)、货币(L,本地货币)。

 

 

 

1、转小写和大写

select lower('Hello') 转小写,upper('Hello') 转大写 from dual;

 

2、用户输入,输入操作

select * from emp where ename=upper('&inputname');

 

3、首字母大写,其余的都小写

select initcap('hElloWorld') from dual;

 

4将每一个雇员的姓名首字母大写

select initcap(ename) from emp;

 

5查询出每个雇员姓名以及雇员姓名的长度

select ename,length(ename) 长度 from emp;

 

6、查询雇员姓名长度为5的全部雇员信息

select ename from emp where length(ename)=5;

 

7、将所有雇员姓名之中的字母A替换为“_

select replace(ename,upper('a'), '_') from emp;

 

8、消除空格数据

select replace('hello world nihao ma ','','') from dual;

 

9、字符串截取操作, 从指定位置截取到结尾

select substr('helloworldnihao',11)from dual;输出nihao

截取部分内容select substr('helloworldnihao',6,5) from dual;输出 world

 

10、要求截取每一位雇员姓名的前三位字符

select ename ,substr(ename,1,3) from emp;

截取每个姓名的后三个字母

select ename,substr(ename,length(ename)-2) from emp;

select ename,substr(ename,-3) from emp;

 

11、四舍五入

select

       round (78915.67823823) ,    78916,小数点之后的内容直接进行四舍五入

       round (78915.67823823,2) ,    78915.68,保留两位小数

       round (78915.67823823,-2) ,    78900,把不足5的数据取消了

       round (78985.67823823,-2) ,    79000,如果超过了5则进行进位

       round(-15.65)         -16

from dual ;

 

截取小数,所有的小数都不进位

select

       trunc(78915.67823823) ,    78915

       trunc (78915.67823823,2) ,   78915.67

       trunc (78915.67823823,-2) ,   78900

       trunc (78985.67823823,-2) ,  78900

       trunc (-15.65)    -15

from dual ;

 

求模(求余数

select mod(10,3)from dual;

 

12、测试若干天之后的日期

select sysdate+10 十天后的日期,sysdate+100 一百天后的日期 from dual;

 

13、计算每一位雇员到今天为止的雇佣天数

select ename,hiredate,sysdate-hiredate from emp;

 

14、计算每一位雇员到今天位置的雇佣总月数

select ename,hiredate,months_between(sysdate,hiredate) 月数 from emp;

 

15、计算每一位雇员到今天所雇佣的年限

select ename,hiredate,trunc(months_between(sysdate,hiredate)/12)years from emp;

 

15、增加若干月之后的日期:

    · 语法:日期 ADD_MONTHS(日期,月数)

select add_months(sysdate,2),add_months(sysdate,12) from dual;

 

16、计算所有还差1年满35年雇佣日期的全部雇员。(34年)

select * from emp where trunc(months_between(sysdate,hiredate)/12)=34;

 

17、计算指定日期所在月的最后一天;

    · 语法:日期 LAST_DAY(日期)

select last_day(sysdate) from dual;

 

18、查询出所有在雇佣所在月倒数第二天被雇佣的雇员信息

select ename,hiredate,last_day(hiredate),last_day(hiredate)-2 from emp

where last_day(hiredate)-2=hiredate;

 

19、计算下一个指定的星期:

    · 语法:日期 next_day(日期,一周时间数)

select next_day(sysdate,'星期二') from dual;

 

20第一步:计算出

    如果要计算年肯定是按照月来计算是最准确的,那么一定要使用MONTHS_BETWEEN()函数进行月的计算,而后除以12就是年。

select ename,hiredate,

    trunc(months_between(sysdate,hiredate)/12)

from emp;

 

21、计算

    在进行年计算的时候就包含有余数,余数实际上就是除12的结果,所以就是月数。利用MOD()函数求出余数。

select ename,hiredate,

     trunc(months_between(sysdate,hiredate)/12),

     trunc(mod(months_between(sysdate,hiredate),12))

from emp;

 

22、计算天数:

      现在为止所知道的计算天数的操作只有一个公式:“日期1 - 日期2 = 数字(天数)”,于是现在的问题就集中在了日期的内容上:

           · 日期1:一定是当前日期,肯定使用SYSDATE伪列;

           · 日期2,实际上已经可以利用MONTHS_BETWEEN()函数求出两个日期之间的月数。

select empno,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;

 

转换函数一共提供有三种TO_CHAR()TO_DATE()TO_NUMBER()

转字符串函数,数字或者是日期可以转换为字符串。

         · 语法:字符串 TO_CHAR( | 日期 | 数字,转换格式)

         · 对于转换格式而言主要有两类格式:

                   |- 日期转换为字符串:年(yyyy)、月(mm)、日(dd)、时(hhhh24)、分(mi)、秒(ss);

                   |- 数字转换为字符串:任意的一位数字(9)、货币(L,本地货币)。

23、格式化日期

select to_char(sysdate,'yyyy-mm-dd'),to_char(sysdate,'hh:mi:ss') from dual;

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

 

24、查询出每个雇员的编号、姓名、雇佣年份

select empno,ename,to_char(hiredate,'yyyy') from emp;

 

25、查询出所有在2月雇佣的雇员信息

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

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

 

Oracle中实际上提供有数据类型的自动转换,如果发现比较的类型不统一,在一定的范围内它是可以转换的。

         TO_CHAR()函数除了可以进行日期的转换之外,也支持数字转换。所谓的数字转换往往是针对于数字的可读性进行一些格式化的操作。

 

26、转换数字

select to_char(34535636376,'L999,999,999,999') from dual;

 

转日期函数:

         如果说现在某一个字符串按照“'--'”的方式编写,那么可以自动转换为日期类型,但是也可以将指定格式的字符串转换为日期类型,这个可以依靠TO_DATE()函数完成,这个函数:

                   · 语法:TO_DATE(字符串,转换格式)

                            |- 年(yyyy)、月(mm)、日(dd)、时(hhhh24)、分(mi)、秒(ss);

 

27、实现字符串转换为日期

select to_date('1991-10-01','yyyy-mm-dd') from dual;

 

转数字函数。

       可以将字符串(由数字所组成)变为数字,语法:数字 TO_NUMBER(字符串)

select to_number('9') * to_number('9') from dual;

 

28、处理null

select ename,empno,job,sal,comm,(sal+comm)*12 from emp;

select ename,empno,job,sal,comm,nvl(comm,0),(sal+nvl(comm,0))*12 from emp;

 

29、多数值判断

语法:DECODE(列,匹配内容1,显示内容1,匹配内容2,显示内容2...[,默认值])

所谓的多数值判断,指的是根据不同的结果可以在输出的时候进行一个数据的转换,假设,现在每一位雇员都有自己的职位,那么现在职位使用的是英文描述,决定将其更换为中文

select empno,ename,job,decode

(job,'CLERK','办事员','SALESMAN','销售','MANAGER',

'经理','ANALYST','分析','PRESIDENT','总裁','暂无此信息')

from emp;

猜你喜欢

转载自404168219.iteye.com/blog/2337614