Ø 简介
本文主要来梳理下 Oracle 中的常用的系统函数,掌握这些函数的使用,对于我们编写 SQL 语句或 PL/SQL 代码时很有帮助,所以这也是必须掌握的知识点。
在 Oracle 中或者其他数据库中都存在两大类函数:
Ø 第一类,单行函数,表现形式为对每一行中指定的数据进行计算或处理,并返回计算后的结果。例如:
SELECT REPLACE(ename, 'A', 'a') ename, t.* FROM emp t;
Ø 第二类,则是多行函数,表现形式为将多行的数据进行计算或处理,并返回计算后的结果,例如:
SELECT t.deptno, AVG(sal) avgsal FROM emp t GROUP BY deptno;
表示,将分组后的多行进行平均值计算,即多行计算函数。
本文主要包括以下函数介绍:
1. 字符串函数
2. 数值函数
3. 日期函数
4. 转换函数
5. NULL 函数
6. 聚合函数
7. 系统函数
8. 其他函数
1. 字符串函数
1) length
语法:length(p_string)
解释:返回字符串的字符长度,如果 p_string 为 NULL 或为空,则返回 NULL。
示例:
SELECT length('ab 中国') col1, length(' ') Col2, length('') Col3, length(NULL) Col4 FROM dual;
2) lengthb
语法:lengthb(p_string)
解释:返回字符串的字节长度,如果 p_string 为 NULL 或为空,则返回 NULL。
示例:
SELECT lengthb('ab 中国') col1, lengthb(' ') Col2, lengthb('') Col3, lengthb(NULL) Col4 FROM dual;
说明:Col1 中包含两个中文“中国”,一个中文占两个字节,所以一共是7个字节。
3) ascii
语法:ascii(p_character)
参数:
p_character: 要检索 ASCII 码的字符,如果包含多个字符,只返回第一个字符的 ASCII 码,忽略之后的所有字符。
解释:返回指定字符对应的 ASCII 码。该函数与 char 函数功能是相反的。
示例:
SELECT ascii('李') col1, ascii('A') col2, ascii('a') col3, ascii('0') col4, ascii(' ') col5, ascii('abc') col6 FROM dual;
4) chr
语法:chr(p_number [using nchar_cs])
参数:
p_number: 用于检索的 ASCII 码数字代码。
using nchar_cs: 如果指定该参数,将返回国家字符集相对应的字符。
解释:返回指定 ASCII 码对应的字符。该函数与 ascii 函数功能是相反的。
示例:
SELECT chr(49390) col1, chr(65) col1, chr(97) col3, chr(48) col4, chr(32) col5, chr(49390 using nchar_cs) col6 FROM dual;
5) cancat
语法:cancat(p_value1, p_value2)
参数:
p_value1: 要连接的第一个值(可以是非字符类型);
p_value2: 要连接的第二个值(可以是非字符类型);
解释:用于连接两个值,这个值可以是数字、日期、或其他类型。cancat 之所以可以传递非字符类型,应该是在函数内部进行了类型转换(个人分析)。
示例:
SELECT concat('he', 'llo') col1, concat('数字:', 12.5) col2, concat('日期:', sysdate) col3, concat('NULL:', NULL) col4 FROM dual;
通常情况下,我们连接字符串习惯用"||"连接符,而不是使用 cancat 函数,因为 cancat 函数同时只能连接两个字符串,而"||"连接符可以同时连接多个,例如:
SELECT (123 || 12.5 || sysdate || '很晚了') col1, concat('该睡觉了', '吗?') col2 FROM dual;
6) upper
语法:upper(p_string)
解释:将指定的字符串中的所有字母都转为大写。
示例:
SELECT upper('Hello woRld') col1, upper('中国') col2, upper(NULL) col3 FROM dual;
7) lower
语法:lower(p_string)
解释:将指定的字符串中的所有字母都转为小写。
示例:
SELECT lower('hEllo ABEAM') col1, lower('中国') col2, lower(NULL) col3 FROM dual;
8) initcap
语法:initcap(p_string)
参数:
p_string: 需要转换的单词字符串。
解释:返回指定单词字符串转换后的字符串,通过(空格、制表符、回车符、换页符、垂直制表符、换行符)分隔每个单词,将首字母转为大写,其他字母全部转为小写。
示例:
SELECT initcap('hello World') col1, initcap('_ello 2orld') col2, initcap('HELLO WORLD') col3, initcap('中国') col4, initcap(NULL) col5 FROM dual;
注意:如果第一个字符不是字母,将继续寻找下一个为字母的字符进行转换,直到遇到第一个为字母的字符。
9) substr
语法:substr(p_string, p_start_position [, p_length])
参数:
p_string: 源字符串;
p_start_position: 提取子字符串的起始位置(包含该位置的子串);
p_length: 可选的。提取子字符串的长度,如果省略该参数,将从 p_start_position 指定的位置提取到源字符串的结尾。
解释:从源字符串中提取子字符串。
示例: