02-Oracle Comprehensive Exercise

 

String functions can process string data. In Oracle , there are the following definitions for such functions: UPPER() , LOWER() , INITCAP() , REPLACE() , LENGTH() , SUBSTR()

 

case conversion function

 

         · Uppercase function: string UPPER ( column | string )

 

         · Lowercase function: string LOWER ( column | string )

 

 

 

capital letters;

 

         Syntax: String INITCAP ( column | data )

 

 

 

Calculate string length

 

         Syntax: number LENGTH ( column | string data )

 

 

 

String replacement, you can use the specified content to replace the data in the original string.

 

         Syntax: string REPLACE( column | data , what to find , newcontent )

 

 

 

String interception

 

         Syntax 1: String SUBSTR( column | data, start point ) , intercepted from the specified start point to the end;

 

         · Syntax 2: String SUBSTR( column | data, start point, length ) : intercepts the substring in the specified range.

 

 

 

In fact, the following three calculation modes are provided for datetimes:

 

                   · date + number = date (date after several days);

 

                   · date - number = date (a number of previous dates)

 

                   date - date = number (number of days between two dates)

 

· Syntax: number MONTHS_BETWEEN( date1 , date2 )

 

 

 

There are three conversion functions : TO_CHAR() , TO_DATE() , TO_NUMBER()

 

 

 

Convert string function, numbers or dates can be converted to strings.

 

         · Syntax: string TO_CHAR( column | date | number, conversion format ) .

 

         There are two main types of formats for conversion:

 

                   |- Date converted to string: year ( yyyy ), month ( mm ), day ( dd ), hour ( hh , hh24 ), minutes ( mi ), seconds ( ss );

 

                   |- Convert numbers to strings: any single digit ( 9 ), currency ( L , local currency).

 

 

 

 

 

 

 

1. Convert lowercase and uppercase

 

select lower('Hello') to lowercase , upper('Hello') to uppercase from dual;

 

 

 

2. User input , input operation

 

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

 

 

 

3. The first letter is capitalized , and the rest are lowercase

 

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;

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326528712&siteId=291194637