范例: 查询所有10部门雇员姓名,但不显示每个雇员姓名的前三个字母
SELECT ename 原姓名,SUBSTR(ename,3) 截取之后的姓名 FORM emp WHERE deptno = 10;范例:显示每个雇员姓名及姓名的后三个字母
要想截取每个姓名之中的后三个,首先要解决的问题是开始点,从一个指定的开始点一直截取到结尾,可是每个雇员的姓名长度是不同的,那么开始点如何确定呢?
实现一:使用传统做法,先求得姓名长度,然后减2确定开始点
SELECT ename 原始姓名,SUBSTR(ename,LENGTH(ename) - 2) 截取之后的姓名 FORM emp WHERE deptno = 10;实现二:除了此类做法之外,也可以设置开始点为负数
SELECT ename 原始姓名,SUBSTR(ename,-3) 截取之后的姓名 FORM emp WHERE deptno = 10;
现在很明显使用第二种最方便,这个也属于 Oracle 的特色,不过需要注意的是:Java 语言的字符串下标还是从0开始,而且 Java 里的 substring() 方法是不能设置负数的。
面试题:请问 Oracle 中的 SUBSTR() 函数的下标开始点是从0还是1开始?
答:可以设置为0,也可以设置为1,即使使用了0,那么最终的结果也会将其定义为1。
范例:返回指定字符的 ASCII 码
SELECT ASCII('A'),ASCII('L') FORM dual;范例:验证 CHR() 函数,将ASCII 码变回字符
SELECT CHR(100) FORM dual;范例:去掉字符串左边空格 - LTRIM() ,去掉右边空格 - RTRIM()
SELECT ' MLDN LiXingHua ' 原始字符串,LTRIM(' ') 去掉左空格 FORM dual; SELECT ' MLDN LiXingHua ' 原始字符串,RTRIM(' ') 去掉右空格 FORM dual;范例:去掉左右空格
SELECT ' MLDN LiXingHua ' 原始字符串,TRIM(' ') 去掉左右空格 FORM dual;不管如何取消空格,中间的空格可是无法消除掉的。
范例:字符串左填充 - LPAD() ,字符串右填充 - RPAD()
SELECT LPAD('MLDN',10,'*') LPAD函数使用,RPAD('MLDN',10,'*') RPAD函数使用, LPAD(RPAD('MLDN',10,'*'),16,'*') 组合使用 FORM dual;范例:字符串查找 - INSTR()
SELECT INSTR('MLDN Java','MLDN') 查找得到, INSTR('MLDN Java','Java') 查找得到, INSTR('MLDN Java','JAVA') 查找不到 FORM dual;这个函数和 Java 中的 indexOf() 方法功能是相同的。
小结:
字符函数的主要功能是进行字符串数据的操作
6.3、数值函数 No.函数名称描述1 ROUND(数字[,保留小数]) 对小数进行四舍五入,可以指定保留位数,如果不指定,则表示将小数点之后的数字全部进行四舍五入
2 TRUNC(数字[,截取位数]) 保留指定位数的小数,如果不指定,则表示不保留小数
3 MOD(数字,数字) 取模
范例:验证 ROUND() 函数的使用
SELECT ROUND(789.652) 不保留小数, ROUND(789.652,2) 不保留小数, ROUND(789.652,-1) 不保留小数, FROM dual;范例:列出每个雇员的一些基本信息和日工资情况
对于日工资的计算可以采用30天为基础,肯定会有小数,就保留2位
SELECT empno,ename,job,hiredate,sal,ROUND(sal/30,2) 日薪金 FROM emp;ROUND() 函数的功能是小数进位,而 TRUNC() 的功能是不进位。
范例:验证 TRUNC() 函数的使用
SELECT TRUNC(789.652) 截取小数, TRUNC(789.652,2) 截取2位小数, TRUNC(789.652,-2) 取整 FROM dual;范例:MOD() 函数验证,模就是取余
SELECT MOD(10,3) FROM dual; 6.4、日期函数如果现在要想进行日期的操作,那一定会存在一个前提,必须知道当前日期
取得当前的系统时间,可以直接利用 SYSDATE 伪列取得当前日期时间。所谓伪列指的是不是表中的列,但是有可以直接使用的列。
SELECT empno,ename,SYSDATE FROM emp; SELECT SYSDATE FROM dual;在默认情况下显示的内容,只包含了年、月、日三个内容,如果要显示更多内容,就必须修改语言环境。
修改日期显示格式:
运行 - sqlplus/nolog - conn c##scott/tiger
输入以下代码
ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss'; SELECT SYSDATE FROM dual;
更改的日期显示格式在关闭窗口重新打开后就会还原了
除了取得系统时间的操作之外,在 Oracle 中也有如下的三个日期操作公式:
日期 - 数字 = 日期, 表示若干天前的日期
日期 + 数字 = 日期, 表示若干天后的日期
日期 - 日期 = 数字(天数),表示两个日期的天数的间隔
可是绝对不会存在 “日期 + 日期” 的计算,下面为其验证。
SELECT SYSDATE+3 三天之后的日期, SYSDATE-3 三天之前的日期 FROM dual;