Oracle中提供了大量的内置函数,以处理各种形式的运算。这些函数涵盖了字符串运算、数值运算、日期运算等方面。同样,Oracle允许使用数值运算、逻辑运算等基本的表达式运算,另外,提供了SQL标准所规定的特殊判式。
函数有以下几种:
字符串函数;
数学函数;
日期函数;
转换函数;
通用函数。
字符串函数
字符串函数:
lower()、upper()函数
lower(列名|字符串)函数用于返回字符串的小写形式。
upper(列名|字符串)函数用于返回字符串的大写形式。
大小写转换函数在查询语句中经常扮演重要角色。
例如,对于用户名和密码的校验来说,用户名一般并不区分大小写,用户无论输入了大写还是小写形式,都被认为是合法用户。因此,在数据库查询时,应该将数据库中用户名与用户输入的用户名进行统一。
SELECT ename,sal FROM emp WHERE ename='SMITH';
SELECT ename,sal FROM emp WHERE ename='&ename';
SELECT ename,sal FROM emp WHERE ename=upper('&ename');
initcap ()函数:
initcap(列名|字符串)函数将单词的首字母大写。
需要注意的是,initcap()函数不能自动识别单词
initcap()函数会将参数中的非单词字符作为单词分隔符
SELECT initcap('big_big_tiger') FROM dual;
SELECT initcap('big/big/tiger') FROM dual;
SELECT initcap('big big tiger') FROM dual;
lpad()函数:
lpad(字符串,长度,填充字符)函数用于左补全字符串。
SELECT lpad('21',6,'0') stock_code FROM dual;
需要注意的是,当原字符串的长度大于预期长度时,实际进行的是截取字符串操作。
SELECT lpad('1234567',6,'0') stock_code FROM dual;
rpad()函数:
与lpad()函数相反,rpad()函数从右端补齐字符串。
SELECT rpad('abc', 10, '*') FROM dual;
注意与说明:lpad()和rpad()都用于填充字符串,lpad()从左端进行填充,而rpad()从右端进行填充,但是,二者在最终截取字符串时,都是从左端开始截取。
SELECT rpad('abcdefg', 6, '*') FROM dual;
length()函数:
length(列名|字符串)函数用于返回字符串的长度。
SELECT length('abcde ') FROM dual;
SELECT length('') FROM dual;
空字符串的长度不是0,而是null。因为空字符串被视作null,所以,length(null)返回的仍然是null。
对其其他数据类型,照样可以通过length()函数来获得其长度。length()函数会首先将参数转换为字符串,然后计算其长度。
SELECT length(12.51) FROM dual;
substr()函数:
substr(列名|字符串,截取字符串开始位置,[截取长度])函数用于截取字符串。
SELECT substr('1234567890', 5, 4) FROM dual;
需要注意的是,Oracle中字符位置从1开始,而不是像某些编程语言(如Java)那样从0开始。
如果不指定长度,那么substr()函数将获取起始位置参数至字符串结尾处的所有字符。
SELECT substr('1234567890', 5) FROM dual;
instr()函数:
instr(父字符串, 子字符串, 起始位置, 匹配序号)函数用于获得子字符串在父字符串中出现的位置。
SELECT instr('big big tiger', 'big') FROM dual;
以命令该函数从指定位置开始搜索。
SELECT instr('big big tiger', 'big', 2) FROM dual;
指定是第几次搜索到子字符串。
SELECT instr('big big tiger', 'big', 2, 2) FROM dual;
trim()函数:
trim()函数可用于删除首尾空白符,相当于ltrim()和rtrim()的组合。
ltrim() 函数用于删除字符串左端的空白符。
rtrim()函数用于删除字符串右端空白符。
select trim(' abc ') from dual;