《oracle笔记单行函数》由会员分享,可在线阅读,更多相关《oracle笔记单行函数(11页珍藏版)》请在金锄头文库上搜索。
1、虽然各个数据库都是支持SQL语句的,但是每一个数据库也有每一个数据库自己所支持的操作函数,这些就是单行函数,而如果要想进行数据库开发的话,除了要会使用SQL之外 ,就是要多学习函数。单行函数主要分为以下五类:字符函数、数字函数、日期函数、转换函数、通用函数;一、字符函数字符函数的功能主要是进行字符串数据的操作,下面给出几个字符函数: UPPER(字符串 | 列):将输入的字符串变为大写返回; LOWER(字符串 | 列):将输入的字符串变为小写返回; INITCAP(字符串 | 列):开头首字母大写; LENGTH(字符串 | 列):求出字符串的长度; REPLACE(字符串 | 列):进行替
2、换; SUBSTR(字符串 | 列,开始点 ,结束点):字符串截取; Oracle之中有一点比较麻烦,即使要验证字符串,也必须编写完整的SQL语句,所以在Oracle数据库之中为了用户查询方便,所以专门提供了一个“dual”的虚拟表。范例:观察转大写的函数SELECT UPPER(hello) FROM dual;SQL SELECT UPPER(hello) FROM dual;UPPER-HELLO大写转换的用处:在一般的使用之中,用户输入数据的时候去关心数据本身存放的是大写还小写吗?SELECT * FROM emp WHERE ename=&str;SQL SELECT * FROM
3、emp WHERE ename=&str;输入 str 的值: smith原值 1: SELECT * FROM emp WHERE ename=&str新值 1: SELECT * FROM emp WHERE ename=smithhttp:/ 未选定行SQL SELECT * FROM emp WHERE ename=&str;输入 str 的值: SMITH原值 1: SELECT * FROM emp WHERE ename=&str新值 1: SELECT * FROM emp WHERE ename=SMITH EMPNO ENAME JOB MGR HIREDATE SAL C
4、OMM DEPTNO- - - - - - - - 7369 SMITH CLERK 7902 17-12月-80 800 20此时如果输入的是小写,则肯定无法查询出数据,所以这个时候不能要求用户这么多,所以这个时候只能由程序自己去适应,加入一个函数:SELECT * FROM emp WHERE ename=UPPER(&str);SQL SELECT * FROM emp WHERE ename=UPPER(&str);输入 str 的值: smith原值 1: SELECT * FROM emp WHERE ename=UPPER(&str)新值 1: SELECT * FROM emp
5、 WHERE ename=UPPER(smith) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO- - - - - - - - 7369 SMITH CLERK 7902 17-12月-80 800 20当然以上的“&”的操作属于替代变量的内容,此部分内容不做重点。范例:观察转小写的操作,http:/ 将所有的雇员姓名按照小写字母返回SELECT LOWER(ename) FROM emp;范例:将每一个雇员姓名的开头首字母大写SELECT INITCAP(ename) FROM emp;范例:查询出每个雇员姓名的长度SELECT ename,LEN
6、GTH(ename) FROM emp;范例:要求查询出姓名长度正好是5的雇员信息SELECT ename,LENGTH(ename) FROM empWHERE LENGTH(ename)=5;范例:使用字母“_”替换掉姓名中的所有字母“A”SELECT REPLACE(ename,A,_) FROM emp;字符串截取操作有两种语法:语法一:SUBSTR(字符串 | 列,开始点),表示从开始点一直截取到结尾;SELECT ename,SUBSTR(ename,3) FROM emp;语法二:SUBSTR(字符串 | 列,开始点,结束点),表示从开始点截取到结束点,截取部分内容;SELECT
7、 ename,SUBSTR(ename,0,3) FROM emp;SELECT ename,SUBSTR(ename,1,3) FROM emp;范例:要求截取每个雇员姓名的后三个字母 正常思路:通过长度-2确定开始点 SELECT ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp; 新思路:设置负数,表示从后指定截取位置; SELECT ename,SUBSTR(ename,-3) FROM emp;面试题:请问SUBSTR()函数截取的时候下标从0还是从1开始? 在Oracle数据库之中,SUBSTR()函数从0或1开始都是一样的; SUBSTR(
8、)也可以设置为负数,表示由后指定截取的开始点; 二、数字函数数字函数一共有三个: ROUND(数字 | 列 ,保留小数的位数):四舍五入的操作; TRUNC(数字 | 列 ,保留小数的位数):舍弃指定位置的内容; MOD(数字 1,数字2):取模,取余数; 范例:验证ROUND()函数SELECT ROUND(903.53567),ROUND(-903.53567), ROUND(903.53567,2), ROUND(-90353567,-1) FROM dual;ROUND(903.53567) ROUND(-903.53567) ROUND(903.53567,2) ROUND(-903
9、53567,-1)- - - - 904 -904 903.54 -90353570范例:验证TRUNC()函数SELECT TRUNC(903.53567),TRUNC(-903.53567), TRUNC(903.53567,2), TRUNC(-90353567,-1) FROM dual;TRUNC(903.53567) TRUNC(-903.53567) TRUNC(903.53567,2) TRUNC(-90353567,-1)- - - - 903 -903 903.53 -90353560范例:取模操作SELECT MOD(10,3) FROM dual; MOD(10,3)-
10、 1以上的三个主要的数学函数,在学习Java中也会有相匹配的内容。三、日期函数如果现在要想进行日期的操作,则首先有一个必须要解决的问题,就是如何取得当前的日期,这个当前日期可以使用“SYSDATE”取得,代码如下:SELECT SYSDATE FROM dual;除了以上的当前日期之外,在日期中也可以进行若干计算: 日期 + 数字 = 日期,表示若干天之后的日期; SELECT SYSDATE + 3,SYSDATE + 300 FROM dual; 日期 数字 = 日期,表示若干天前的日期; SELECT SYSDATE - 3,SYSDATE - 300 FROM dual; 日期 日期
11、= 数字,表示的是两个日期间的天数,但是肯定是大日期 小日期; 范例:求出每个雇员到今天为止的雇佣天数SELECT ename,hiredate,SYSDATE-hiredate FROM emp;而且很多的编程语言之中,也都会提出一种概念,日期可以通过数字表示出来。除了以上的三个公式之外,也提供了如下的四个操作函数: LAST_DAY(日期):求出指定日期的最后一天; 范例:求出本月的最后一天日期SELECT LAST_DAY(SYSDATE) FROM dual; NEXT_DAY(日期,星期数):求出下一个指定星期X的日期; 范例:求出下一个周一SELECT NEXT_DAY(SYSDA
12、TE,星期一) FROM dual; ADD_MONTHS(日期,数字):求出若干月之后的日期; 范例:求出四个月后的日期SELECT ADD_MONTHS(SYSDATE,4) FROM dual; MONTHS_BETWEEN(日期1,日期2):求出两个日期之间所经历的月份; 范例:求出每个雇员到今天为止的雇佣月份SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate) FROM emp;在所有的开发之中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。四、转换函数现在已经接触到了Oracle数据库之中的
13、三种数据:数字(NUMBER)、字符串(VARCHAR2)、日期(DATE),转换函数的主要功能是完成这几种数据间的互相转换操作,一共有三种转换函数: TO_CHAR(字符串 | 列,格式字符串):将日期或者是数字变为字符串显示; TO_DATE(字符串,格式字符串):将字符串变为DATE数据显示; TO_NUMBER(字符串):将字符串变为数字显示; a、TO_CHAR()函数在之前查询过当前的系统日期时间:SELECT SYSDATE FROM dual;这个时候是按照“日-月-年”的格式显示,很明显这种显示格式不符合正常的思路,正常是“年-月-日”,所以这种情况下可以使用TO_CHAR()函数,但是使用此函数的话需要一些格式字符串:年(yyyy),月(mm),日(dd)。SELECT TO_CHAR(SYSDATE,yyyy-mm-dd),TO_CHAR(SYSDATE,yyyy) year, TO_CHA