参考文献:《MySQL8数据库原理与实战》麻进玲、陈婷、陈昌平 机械工业出版社
目录
1.字符串函数
字符串函数表
Ascii(char) | 返回字符的ASCI码值 |
Bit_length(str) | 返回字符串的比特长度 |
Concat(s1, s2, …, sn) | 将sl,s2,…,sn 连接成字符串,任一参数为NULL则返回NULL |
Insert(str, x, y ,instr) | 将字符串sr从第x位置开始,y个字符长的子串替换为字符中instr,返回结果 |
Find_in_set(str, list) | 分析逗号分隔的list列表,如果发现str、返回str在list中的位置 |
Lcase(str)、Lower(str) | 返回将字符串sr中所有字符转变为小写后的结果 |
Left(str, x) | 返回字符串s中最左边的x个字符 |
Length(str) | 返回字符串中的字符数 |
Ltrim(str) | 从字符串str中切掉开头的空格 |
Position(substr, str) | 返回子串substr在字符串str中第一次出现的位置,从0开始数 |
Quote(str) | 用反斜杠转义str中的单引号 |
Repeat(str, x) | 返回字符串业重复x次的结果 |
Reverse(str) | 返回颜倒字符申st的结果 |
Right(str) | 返回字符串str中最右边的x个字符 |
Rtrim(str) | 返回字符串str尾部的空格 |
Strcmp(s1, s2) | 比较字符串s1和s2,相同为0,s1大于s2则为1否则为-1 |
Trim(str) | 去除字符串首部和尾部的所有空格 |
Ucase(str)、Upper(str) | 返回将字符串str中所有字符转变为大写后的结果 |
Concat_ws(s1, s2, …, sn) | 将sl,s2,…,sn 连接成字符串,任一参数为NULL则忽略该NULL |
Sub_str(str, pos[, len]) | 从str字符串中指定位置pos开始取一个子串并返回 |
Char_length(str) | 返回字符串的字符个数 |
Instr(str, substr) | 返回str中substr出现的第一次位置 |
Lpad(str, len, padstr) | 在str的左边填充padstr到指定长度len |
Rpad(str, len, padstr) | 在str的右边填充padstr到指定长度len |
Replace(str, from_str, to_str) | 在str中找到所有from_str并用to_str替代后返回 |
Format(X, D[, local]) | 以“#,###, ###.##”格式化数字X,D指定小数位数,local指定国家语言,默认为en_US |
Space(N) | 返回由N个空格构成的字符串 |
Field(str, s1, s2, …, sn) | 返回与str相匹配的第一个字符串si的位置,i=1, .., n,s1位置为1,s2位置为2 |
Elt(pos, s1, s2, .., sn) | 返回第pos个位置字符串spos |
Substring(str, pos, len) | 返回str第pos个位置长度为len的字符串 |
Mid(str, pos, len) | 返回str第pos个位置长度为len的字符串 |
2.数值函数
数值函数表
Abs(x) | 返回数值x的绝对值 |
Ceil(x) | 返回大于或等于x的最小整数值 |
Floor(x) | 返回小于或等于x的最大整数值 |
Mod(x,y) | 返回结果x模y的值,即求余 |
Rand() | 返回0~1内的随机数 |
Round(x,y) | 返回x四舍五入后的有y位小数的数值 |
Truncate(x,y) | 返回数值x截断为y位小数的数值 |
3.日期和时间函数
日期和时间函数表
SELECT NOW(); | 返回当前日期和时间 |
SELECT CURDATE(); | 返回当前日期(不包括时间) |
SELECT CURTIME(); | 返回当前时间(不包括日期) |
SELECT YEAR(NOW()); | 返回当前年份 |
SELECT MONTH(NOW()); | 返回当前月份 |
SELECT DAY(NOW()); | 返回当前日 |
SELECT HOUR(NOW()); | 返回当前小时 |
SELECT MINUTE(NOW()); | 返回当前分钟 |
SELECT SECOND(NOW()); | 返回当前秒 |
SELECT DATE_ADD('2023-10-01', INTERVAL 1 DAY); | 在指定日期上添加一天 |
SELECT DATE_SUB('2023-10-01', INTERVAL 1 DAY); | 在指定日期上减去一天 |
SELECT DATEDIFF('2023-10-10', '2023-10-01'); | 返回两个日期之间的天数差异 |
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); | 按指定格式(年-月-日)返回当前日期 |
SELECT DATE_FORMAT(NOW() ,'%Y-%m-01'); | 返回当前月份的第一天 |
SELECTEXTRACT(YEARFROMNOW()), EXTRACT(MONTHFROMNOW()); | 返回当前日期的年份和月份 |
SELECT MAKEDATE(YEAR(NOW()), 1); | 返回当前年份的第一天 |
SELECT MAKEDATE(YEAR(NOW()), 1) +INTERVAL QUARTER(NOW()) QUARTER -INTERVAL 1 QUARTER; | 返回当前季度的第一天 |
SELECT DATE_SUB(NOW(), INTERVAL WEEKDAY(NOW()) DAY); | 返回当前周的第一天(假设周一为第一天) |
SELECT WEEK('YYYY-MM-DD', mode); | 返回日期的周数,默认的周开始日期是星期日, mode = 0: 周从星期日开始,范围是 0-53; mode = 1: 周从星期一开始,范围是 0-53; mode = 2: 周从星期日开始,范围是 1-53; mode = 3: 周从星期一开始,范围是 1-53 |
4.系统信息函数
系统信息函数表
Database() | 返回当前数据库名 |
Version() | 返回数据库的版本号 |
User() | 返回当前用户 |
Md5( str ) | 返回字符串 str 的 Md5 值,对str进行加密,用于对普通的不需要解密的数据进行加密 |
Password( str ) | 返回字符串str的加密版本 |
5.流程控制函数
流程控制函数表
IF 语句 | 根据条件返回不同的值 | SELECTname, salary, IF(salary >5000, 'High', 'Low') AS salary_level FROMemployees; |
CASE 语句 | 根据条件返回不同的值 | SELECTname, salary, CASE WHEN salary >5000 THEN 'High' WHEN salary BETWEEN 3000 AND 5000 THEN 'Medium' ELSE 'Low' END AS salary_level FROM employees; |
IF NULL / COALESCE 函数 | 使用 IFNULL 函数替换NULL值(MySQL)
使用 COALESCE 函数替换NULL值(适用于大多数SQL数据库) | SELECT name, IFNULL(bonus, 0) AS bonus
SELECTname, COALESCE(bonus, 0) AS bonus |
NULLIF 函数 | NULLIF 函数用于比较两个表达式, 如果它们相等则返回NULL, 否则返回第一个表达式的值。 | SELECT name, NULLIF(salary, 0) AS salary |
6.常见聚合函数
常见聚合函数表
功能 | 示例 | 解释 |
计算列的总和 | SELECT SUM(salary) FROM employees; | 计算员工工资的总和 |
计算列的平均值 | SELECT AVG(salary) FROM employees; | 计算员工工资的平均值 |
计算列的最大值 | SELECT MAX(salary) FROM employees; | 计算员工工资的最大值 |
计算列的最小值 | SELECT MIN(salary) FROM employees; | 计算员工工资的最小值 |
计算行数 | SELECT COUNT(*) FROM employees; | 计算员工的总数 |
计算非空的行数 | SELECT COUNT(salary) FROM employees; | 计算工资字段非空值的数量 |
合并两个查询的结果集,并去除重复的行 | SELECT name FROM employees | 合并员工和客户的名字,并去除重复的名字 |
合并两个查询的结果集,并保留重复的行 | SELECT name FROM employees | 合并员工和客户的名字,并保留重复的名字 |