Skip to content

[!quote] 大多数 SQL 支持以下函数:

  • 算术操作的数值函数
  • 生成美观的输出内容的格式化函数
  • 返回 DBMS 特殊信息的系统函数
  • 聚合函数

日期函数

  • now() 获取当前的系统时间
  • YEAR(date) 在 date 数据类型中提取出 year
sql
insert into customer(update_time) values (now());         //插入当前时间

SELECT order_num FROM Orders WHERE YEAR(order_date) = 2020;

文本函数

  • CONCAT(S1,S2,..Sn) 将 S1,S2,….Sn 拼接成一个字符串
  • LOWER(str) 将字符串 str 全部转为小写
  • UPPER(str) 将字符串 str 全部转为大写
  • LPAD(str,n,pad) 左填充,用字符串 pad 对 str 的左边进行填充,达到 n 个长度
  • RPAD(str,n,pad) 右填充,用字符串 pad 对 str 的右边进行填充,达到 n 个长度
  • TRIM(str) 去掉字符串头部和尾部的空格
  • SUBSTRING(str,start,len) 返回从字符串 str 从 start 位置起的 len 个长度的字符串
  • LEFT(str,len) 返回 str 左边开始数 len 长度个字符
  • RIGHT(str,len) 返回 str 右边开始数 len 长度个字符
  • LENGTH(str) 返回 str 字符串的长度
sql
select concat ('hello', 'MySQL');         hello MySQL 
select Lower('Hello');       hello
select upper('Hello');        HELLO
select lpad('01', 5, '-');       ---01
select rpad('01', 5, '-');        01---
select trim(' Hello MySQL ')       Hello MySQL
						// RTRIM():去掉字符串右边的空格
						// LTRIM():去掉字符串左边的空格

select substring('Hello MySQL',1, 5);     Hello
          // 注意索引是从1开始的

SELECT LEFT('HELLO',3);     HEL
SELECT LENGTH('HELLO');     5

聚合函数

  • AVG() 返回某列的平均值
  • COUNT() 返回某列的行数
sql
SELECT COUNT(cust_email) AS num_cust FROM Customers;

[!hint] 对于 NULL 的计数

  • 使用 COUNT(*) 对表中行进行计数时,对于 NULL值 也会记录
sql
SELECT COUNT(*) FROM Customers;
  • 如果只是 COUNT(某个字段),则不会计数 NULL值
sql
SELECT COUNT(numbers) FROM Customers;
  • MAX() 返回某列的最大值
  • MIN() 返回某列的最小值
  • SUM() 返回某列值之和

数值函数

[!hint] 数值函数是各种 DBMS 最一致的函数

  • 数学运算函数
    • CEIL(x) 向上取整
    • FLOOR(x) 向下取整
    • MOD(x, y) 返回 x/y 的余数
    • RAND() 返回 0 到 1 之间的随机数
    • ROUND(x, y) 对参数 x 进行四舍五入,保留 y 位小数
  • 数学函数与常量
    • ABS() 返回一个数的绝对值
    • COS() 返回一个角度的余弦
    • EXP() 返回一个数的指数值
    • PI() 返回圆周率π的值
    • SIN() 返回一个角度的正弦
    • SQRT() 返回一个数的平方根
    • TAN() 返回一个角度的正切

流程控制函数

  • IF(表达式, tvalue, fvalue) 当表达式为 true 时,取值 tvalue,否则 fvalue
  • IFNULL(value1, value2) 当 value1 为 NULL 时,返回 value2,否则返回 value1
  • CASE
sql
// 从上到下地评估 `WHEN` 后面的条件。当满足条件时,就会返回对应的结果,并跳过所有的剩余条件
// 如果没有任何条件被满足,它就会返回 `ELSE` 后面的结果
// 如果没有 `ELSE`,且没有任何条件被满足,就返回 NULL
CASE
   WHEN 表达式 THEN value1
   WHEN 表达式 THEN value2
   ...
   ELSE value3
END;