SQL005 数据库整理笔记 (5)单行函数和函数嵌套

87 阅读2分钟

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;