5. 单行函数
5.1 单行函数与组函数
-
单行函数
- 对SQL语句的每一行数据都返回一个处理结果,sql语句影响多少行就返回多少个结果。例如字符串大小写函数
-
组函数
- 对SQL语句的影响的所有数据统一处理返回一个结果,无论SQL语句影响多少行,都返回一个结果。例如求和函数
5.2 单行函数的测试
- 为了测试单行函数,不让它返回多次结果。在oracle中使用dual测试表。dual 是一张单行单列的表,但是在mydql中并没有dual,但是它会生成一张虚拟的表。所以在mysql中可以和oracl用相同的写法,也可以省略from dual.
-- Oracle
SQL> SELECT UPPER('hello world') FROM dual;
-- mysql
SQL> SELECT UPPER('hello world') FROM DUAL;
-- mysql
SQL> select upper('hello world');
5.3 oracle中常见的字符串处理函数
- upper(字符串) 全大写
SQL> SELECT UPPER('hello world') FROM dual;
- lower(字符串) 全小写
SELECT LOWER('HELLO WORLD') FROM DUAL;
-
initcap(字符串) 每个单词的首字母大写
- mysql中的没有直接对应的函数,只能通过大小写字母拼接的方式来实现。
SQL> SELECT INITCAP('hello world') FROM DUAL;
- length(字符串) 求字符串的长度
SELECT LENGTH('hello world') FROM DUAL;
-
concat(字符串1, 字行串2) 拼接字符串
- 注意在oracle中的,只能两两拼接,所在在oracle中大多使用 || 来拼接。
- 在mysql中,此函数的功能与|| 相同,可以与多个字符串拼接。concat(字符串1, 字行串2, ..., 字符串n),
SELECT CONCAT('hello', ' world') FROM DUAL;
- substr(原始字符串, 截取位置, 截取字符数量)
- 注意,截取位置是从1开始,-1表示最后一个字符。
- mysql中也可以使用此函数,mysql中的标准函数是substring.
-- 把s_emp中的first_name 和 first_name的前三个字符截取下来;
SQL> SELECT first_name, SUBSTR(first_name, 1, 3) FROM s_emp;
6. 函数嵌套
- 函数嵌套就是将一个函数的返回值作为另一个函数的参数
-- 把s_emp中的first_name 和 first_name的后三个字符截取下来;
SQL> SELECT first_name, SUBSTR(first_name, LENGTH(first_name) - 3 + 1, 3) FROM s_emp;
-- 显示s_emp中的first_name,manager_id 如果 manager_id为NULL则显示成BOSS
-- oracle
SQL> SELECT first_name, nvl(manager_id, -1) FROM s_emp;
-- Mysql
SQL> SELECT first_name, COALESCE(manager_id, -1) FROM s_emp;