单行函数(2)

范例: 查询所有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;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4660a92bd9f744bd670d3268e8dfdc88.html