函数
DUAL:亚元表,可以作为测试表使用
合计 / 统计函数
1、COUNT:返回指定列的行总数
SELECT COUNT(*) FROM 表名;
SELECT COUNT(列名) FROM 表名;
(1)WHERE 子句可选
(2)COUNT(*):统计并返回满足 WHERE 条件的行数,不排除 NULL
(3)COUNT(列名):统计并返回满足 WHERE 条件的某列的行数,排除 NULL
2、SUM、AVG、MAX、MIN 只作用数值,即只用于数值列
(1)WHERE 子句可选
(2)用逗号分隔
(3)SUM:返回指定列的行的和
SELECT SUM(列名1), SUM(列名2),…… FROM 表名;
(4)AVG:返回列的和
SELECT AVG(列名1), AVG(列名2),…… FROM 表名;
(5)MAX:返回列的最大值
SELECT MAX(列名1), MAX(列名2),…… FROM 表名;
(6)MIN:返回列的最小值
SELECT MIN(列名1), MIN(列名2),…… FROM 表名;
分组函数
SELECT 列名1, 列名2,…… FROM 表名
WHERE ……
GROUP BY 列名1, 列名2,……
HAVING ……
1、WHERE:对表中字段先筛选再查询
2、GROUP BY:对查询结果分组统计
3、HAVING:对查询结果的再筛选,限制分组的显示结果,可以使用别名进行过滤
字符串函数
SELECT 字符串函数 FROM 表名;
1、返回字符串的字符集
CHARSET(String)
2、连接字符串,多个列拼接为一列
CONCAT(String1, String2……)
3、返回 substring 在 String 中的位置,索引从 1 开始,不存在,则返回 0
INSTR(String, substring)
4、转换成大写
UCASE(String)
5、转换成小写
LCASE(String)
6、从 String 左方起,取 length 个字符
LEFT(String, length)
7、从 String 右方起,取 length 个字符
RIGHT(String, length)
8、统计 String 长度,按照字节大小返回
LENGTH(String)
9、在 str 中用 replace_str 代替 search_str
REPLACE(str, search_str, replace_str)
10、逐字符比较字符串大小
STRCMP(String1, String2)
11、从 str 的 position 取出 length 个字符,索引从 1 开始,不指定 length 则全取 position 后的字符
SUBSTRING(str, position, length)
12、去除前端空格
LTRIM(str)
13、去除后端空格
RTRIM(str)
14、去除前、后端空格
TRIM(str)
15、将 string 字符串,按 format_mask 格式,转变为 date 类型
STR_TO_DATE(string, format_mask)
(1)日期格式:%Y 年、%m 月、%d 日、%h 时、%i 分、%s 秒
16、将第一个 character_expression 中自 start 位置起删除 length 个字符,然后将第二个 character_expression 插入到第一个 character_expression 中的 start 位置
STUFF(character_expression, start, length, character_expression)
(1)character_expression:一个字符数据表达式。character_expression 可以是常量、变量、字符列、二进制数据列
(2)start:一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。start 可以是 BIGINT 类型
(3)length:一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。length 可以是 BIGINT 类型
(4)返回类型:如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 BINARY 数据类型,则返回二进制数据
数学函数
SELECT 数学函数 FROM 表名;
1、绝对值
ABS(num)
2、十进制转二进制
BIN(decimal_number)
3、向上取整,返回不小于 number 的最小整数
CEILING(number)
4、from 进制的 number 转为 to 进制,并输出
CONV(number, from, to)
5、向下取整,返回不大于 number 的最大整数
FLOOR(number)
6、保留 decimal_places 位小数,四舍五入
FORMAT(number, decimal_places)
7、十进制转十六进制
HEX(decimal_number)
8、十进制转八进制
OCT(decimal_number)
9、求最小值
LEAST(num1, num2,……)
10、求余,即取模 num1 % num2
MOD(num1, num2)
11、返回 [0.0, 1.0] 的随机数
RAND()
12、返回 [0.0, 1.0] 的随机数,seed 不变,随机数不变
RAND(seed)
时间日期函数
SELECT 时间日期函数 FROM 表名;
1、当前年月日
CURRENT_DATE()
2、当前时分秒
CURRENT_TIME()
3、当前时间戳(年月日时分秒)
CURRENT_TIMESTAMP()
4、返回 datetime 年月日部分
DATA(datetime)
5、在 date 加上 type 类型 expr 时间
DATE_ADD(date, INTERVAL expr type)
6、在 date 减去 type 类型 expr 时间
DATE_SUB(date, INTERVAL expr type)
7、type 类型
(1)MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR
(2)SECOND_MICROSECOND、MINUTE_SECOND、MINUTE_MICROSECOND、HOUR_MINUTE、HOUR_SECOND、HOUR_MICROSECOND、DAY_HOUR、DAY_MINUTE、DAY_SECOND、DAY_SECOND、DAY_MICROSECOND、YEAR_MONTH
8、以天数形式,返回 date1 减去 date2 的时间差,date1、date2 需要格式相同
DATEDIFF(date1, date2)
9、以时分秒形式,返回 date1 减去 date2 的时间差,date1、date2 需要相同类型
TIMEDIFF(date1, date2)
10、以年月日时分秒形式,返回当前时间
NOW()
11、返回 datetime 年部分
YEAR(datetime)
12、返回 datetime 月部分
MONTH(datetime)
13、返回 datetime 日部分
DAY(datetime)
14、以秒数形式,返回 1970-1-1 00:00:00 到现在的时间差
UNIX_TIMESTAMP()
15、1970-1-1 00:00:00 加上 unix_timestamp 的秒数,返回得出的时间
FROM_UNIXTIME(unix_timestamp, format)
(1)format 为可选参数,指定日期格式
(2)不指定 format,则默认格式:%Y-%m-%d %H:%i:%s
16、返回 date 所在月份的最后一天,如果 date 是无效的,则返回 NULL
LAST_DAY(date)
LAST_DAY(datetime)
17、将 date 类型的 d,按 f 格式,转为字符串
DATE_FORMAT(d,f)
系统函数
1、查看当前 MySQL 的登录用户及登录 IP
SELECT USER() FROM DUAL;
2、查询当前使用数据库的名称
SELECT DATABASE();
加密函数
1、为字符串算出一个 MD5 的 32 位字符串,用于加密
MD5(str);
2、默认的加密方式,计算并返回密码字符串
PASSWORD(str)
流程控制函数
1、若 expr1 为 true,则返回 expr2;若 expr1 为 false,返回 expr3
IF(expr1, expr2, expr3)
2、若 expr1 不为 null,则返回 expr1;若 expr1 为 null,返回 expr2
IFNULL(expr1, expr2)
3、condition 从上至下依次判断,判断为 true 时,执行对应 result,判断都为 false 时,执行 resultN
SELECT CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
……
ELSE resultN END
(1)THEN 后边的值与 ELSE 后边的值类型需要一致,否则会报错
总览
1、MySQL 字符串函数
函数 | 描述 | 实例 |
---|---|---|
ASCII(s) | 返回字符串 s 的第一个字符的 ASCII 码。 |
返回 CustomerName 字段第一个字母的 ASCII 码:
|
CHAR_LENGTH(s) | 返回字符串 s 的字符数 |
返回字符串 RUNOOB 的字符数
|
CHARACTER_LENGTH(s) | 返回字符串 s 的字符数,等同于 CHAR_LENGTH(s) |
返回字符串 RUNOOB 的字符数
|
CONCAT(s1,s2...sn) | 字符串 s1,s2 等多个字符串合并为一个字符串 |
合并多个字符串
|
CONCAT_WS(x, s1,s2...sn) | 同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符 |
合并多个字符串,并添加分隔符:
|
FIELD(s,s1,s2...) | 返回第一个字符串 s 在字符串列表(s1,s2...)中的位置 |
返回字符串 c 在列表值中的位置:
|
FIND_IN_SET(s1,s2) | 返回在字符串s2中与s1匹配的字符串的位置 |
返回字符串 c 在指定字符串中的位置:
|
FORMAT(x,n) | 函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。 |
格式化数字 "#,###.##" 形式:
|
INSERT(s1,x,len,s2) | 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串 |
从字符串第一个位置开始的 6 个字符替换为 runoob:
|
LOCATE(s1,s) | 从字符串 s 中获取 s1 的开始位置 |
获取 b 在字符串 abc 中的位置:
返回字符串 abc 中 b 的位置:
|
LCASE(s) | 将字符串 s 的所有字母变成小写字母 |
字符串 RUNOOB 转换为小写:
|
LEFT(s,n) | 返回字符串 s 的前 n 个字符 |
返回字符串 runoob 中的前两个字符:
|
LOWER(s) | 将字符串 s 的所有字母变成小写字母 |
字符串 RUNOOB 转换为小写:
|
LPAD(s1,len,s2) | 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len |
将字符串 xx 填充到 abc 字符串的开始处:
|
LTRIM(s) | 去掉字符串 s 开始处的空格 |
去掉字符串 RUNOOB开始处的空格:
|
MID(s,n,len) | 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len) |
从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:
|
POSITION(s1 IN s) | 从字符串 s 中获取 s1 的开始位置 |
返回字符串 abc 中 b 的位置:
|
REPEAT(s,n) | 将字符串 s 重复 n 次 |
将字符串 runoob 重复三次:
|
REPLACE(s,s1,s2) | 将字符串 s2 替代字符串 s 中的字符串 s1 |
将字符串 abc 中的字符 a 替换为字符 x:
|
REVERSE(s) | 将字符串s的顺序反过来 |
将字符串 abc 的顺序反过来:
|
RIGHT(s,n) | 返回字符串 s 的后 n 个字符 |
返回字符串 runoob 的后两个字符:
|
RPAD(s1,len,s2) | 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len |
将字符串 xx 填充到 abc 字符串的结尾处:
|
RTRIM(s) | 去掉字符串 s 结尾处的空格 |
去掉字符串 RUNOOB 的末尾空格:
|
SPACE(n) | 返回 n 个空格 |
返回 10 个空格:
|
STRCMP(s1,s2) | 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1 |
比较字符串:
|
SUBSTR(s, start, length) | 从字符串 s 的 start 位置截取长度为 length 的子字符串 |
从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:
|
SUBSTRING(s, start, length) | 从字符串 s 的 start 位置截取长度为 length 的子字符串,等同于 SUBSTR(s, start, length) |
从字符串 RUNOOB 中的第 2 个位置截取 3个 字符:
|
SUBSTRING_INDEX(s, delimiter, number) | 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。 如果 number 是正数,返回第 number 个字符左边的字符串。 如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。 |
|
TRIM(s) | 去掉字符串 s 开始和结尾处的空格 |
去掉字符串 RUNOOB 的首尾空格:
|
UCASE(s) | 将字符串转换为大写 |
将字符串 runoob 转换为大写:
|
UPPER(s) | 将字符串转换为大写 |
将字符串 runoob 转换为大写:
|
2、MySQL 数字函数
函数名 | 描述 | 实例 |
---|---|---|
ABS(x) | 返回 x 的绝对值 |
返回 -1 的绝对值:
|
ACOS(x) | 求 x 的反余弦值(单位为弧度),x 为一个数值 |
|
ASIN(x) | 求反正弦值(单位为弧度),x 为一个数值 |
|
ATAN(x) | 求反正切值(单位为弧度),x 为一个数值 |
|
ATAN2(n, m) | 求反正切值(单位为弧度) |
|
AVG(expression) | 返回一个表达式的平均值,expression 是一个字段 |
返回 Products 表中Price 字段的平均值:
|
CEIL(x) | 返回大于或等于 x 的最小整数 |
|
CEILING(x) | 返回大于或等于 x 的最小整数 |
|
COS(x) | 求余弦值(参数是弧度) |
|
COT(x) | 求余切值(参数是弧度) |
|
COUNT(expression) | 返回查询的记录总数,expression 参数是一个字段或者 * 号 |
返回 Products 表中 products 字段总共有多少条记录:
|
DEGREES(x) | 将弧度转换为角度 |
|
n DIV m | 整除,n 为被除数,m 为除数 |
计算 10 除于 5:
|
EXP(x) | 返回 e 的 x 次方 |
计算 e 的三次方:
|
FLOOR(x) | 返回小于或等于 x 的最大整数 |
小于或等于 1.5 的整数:
|
GREATEST(expr1, expr2, expr3, ...) | 返回列表中的最大值 |
返回以下数字列表中的最大值:
返回以下字符串列表中的最大值:
|
LEAST(expr1, expr2, expr3, ...) | 返回列表中的最小值 |
返回以下数字列表中的最小值:
返回以下字符串列表中的最小值:
|
LN | 返回数字的自然对数,以 e 为底。 |
返回 2 的自然对数:
|
LOG(x) 或 LOG(base, x) | 返回自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。 |
|
LOG10(x) | 返回以 10 为底的对数 |
|
LOG2(x) | 返回以 2 为底的对数 |
返回以 2 为底 6 的对数:
|
MAX(expression) | 返回字段 expression 中的最大值 |
返回数据表 Products 中字段 Price 的最大值:
|
MIN(expression) | 返回字段 expression 中的最小值 |
返回数据表 Products 中字段 Price 的最小值:
|
MOD(x,y) | 返回 x 除以 y 以后的余数 |
5 除于 2 的余数:
|
PI() | 返回圆周率(3.141593) |
|
POW(x,y) | 返回 x 的 y 次方 |
2 的 3 次方:
|
POWER(x,y) | 返回 x 的 y 次方 |
2 的 3 次方:
|
RADIANS(x) | 将角度转换为弧度 |
180 度转换为弧度:
|
RAND() | 返回 0 到 1 的随机数 |
|
ROUND(x) | 返回离 x 最近的整数 |
|
SIGN(x) | 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 |
|
SIN(x) | 求正弦值(参数是弧度) |
|
SQRT(x) | 返回x的平方根 |
25 的平方根:
|
SUM(expression) | 返回指定字段的总和 |
计算 OrderDetails 表中字段 Quantity 的总和:
|
TAN(x) | 求正切值(参数是弧度) |
|
TRUNCATE(x,y) | 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) |
|
3、MySQL 日期函数
函数名 | 描述 | 实例 |
---|---|---|
ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 |
|
ADDTIME(t,n) | n 是一个时间表达式,时间 t 加上时间表达式 n |
加 5 秒:
添加 2 小时, 10 分钟, 5 秒:
|
CURDATE() | 返回当前日期 |
|
CURRENT_DATE() | 返回当前日期 |
|
CURRENT_TIME | 返回当前时间 |
|
CURRENT_TIMESTAMP() | 返回当前日期和时间 |
|
CURTIME() | 返回当前时间 |
|
DATE() | 从日期或日期时间表达式中提取日期值 |
|
DATEDIFF(d1,d2) | 计算日期 d1->d2 之间相隔的天数 |
|
DATE_ADD(d,INTERVAL expr type) | 计算起始日期 d 加上一个时间段后的日期,type 值可以是:
|
|
DATE_FORMAT(d,f) | 按表达式 f的要求显示日期 d |
|
DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。 |
Orders 表中 OrderDate 字段减去 2 天:
|
DAY(d) | 返回日期值 d 的日期部分 |
|
DAYNAME(d) | 返回日期 d 是星期几,如 Monday,Tuesday |
|
DAYOFMONTH(d) | 计算日期 d 是本月的第几天 |
|
DAYOFWEEK(d) | 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 |
|
DAYOFYEAR(d) | 计算日期 d 是本年的第几天 |
|
EXTRACT(type FROM d) | 从日期 d 中获取指定的值,type 指定返回的值。 type可取值为:
|
|
FROM_DAYS(n) | 计算从 0000 年 1 月 1 日开始 n 天后的日期 |
|
HOUR(t) | 返回 t 中的小时值 |
|
LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 |
|
LOCALTIME() | 返回当前日期和时间 |
|
LOCALTIMESTAMP() | 返回当前日期和时间 |
|
MAKEDATE(year, day-of-year) | 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 |
|
MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 |
|
MICROSECOND(date) | 返回日期参数所对应的微秒数 |
|
MINUTE(t) | 返回 t 中的分钟值 |
|
MONTHNAME(d) | 返回日期当中的月份名称,如 November |
|
MONTH(d) | 返回日期d中的月份值,1 到 12 |
|
NOW() | 返回当前日期和时间 |
|
PERIOD_ADD(period, number) | 为 年-月 组合日期添加一个时段 |
|
PERIOD_DIFF(period1, period2) | 返回两个时段之间的月份差值 |
|
QUARTER(d) | 返回日期d是第几季节,返回 1 到 4 |
|
SECOND(t) | 返回 t 中的秒钟值 |
|
SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式 |
|
STR_TO_DATE(string, format_mask) | 将字符串转变为日期 |
|
SUBDATE(d,n) | 日期 d 减去 n 天后的日期 |
|
SUBTIME(t,n) | 时间 t 减去 n 秒的时间 |
|
SYSDATE() | 返回当前日期和时间 |
|
TIME(expression) | 提取传入表达式的时间部分 |
|
TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t |
|
TIME_TO_SEC(t) | 将时间 t 转换为秒 |
|
TIMEDIFF(time1, time2) | 计算时间差值 |
|
TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 |
|
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) | 计算时间差,返回 datetime_expr2 − datetime_expr1 的时间差 |
|
TO_DAYS(d) | 计算日期 d 距离 0000 年 1 月 1 日的天数 |
|
WEEK(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 |
|
WEEKDAY(d) | 日期 d 是星期几,0 表示星期一,1 表示星期二 |
|
WEEKOFYEAR(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 |
|
YEAR(d) | 返回年份 |
|
YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 |
|
4、MySQL 高级函数
函数名 | 描述 | 实例 |
---|---|---|
BIN(x) | 返回 x 的二进制编码 |
15 的 2 进制编码:
|
BINARY(s) | 将字符串 s 转换为二进制字符串 |
|
|
CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 |
|
CAST(x AS type) | 转换数据类型 |
字符串日期转换为日期:
|
COALESCE(expr1, expr2, ...., expr_n) | 返回参数中的第一个非空表达式(从左向右) |
|
CONNECTION_ID() | 返回唯一的连接 ID |
|
CONV(x,f1,f2) | 返回 f1 进制数变成 f2 进制数 |
|
CONVERT(s USING cs) | 函数将字符串 s 的字符集变成 cs |
|
CURRENT_USER() | 返回当前用户 |
|
DATABASE() | 返回当前数据库名 |
|
IF(expr,v1,v2) | 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。 |
|
IFNULL(v1,v2) | 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 |
|
ISNULL(expression) | 判断表达式是否为 NULL |
|
LAST_INSERT_ID() | 返回最近生成的 AUTO_INCREMENT 值 |
|
NULLIF(expr1, expr2) | 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 |
|
SESSION_USER() | 返回当前用户 |
|
SYSTEM_USER() | 返回当前用户 |
|
USER() | 返回当前用户 |
|
VERSION() | 返回数据库的版本号 |
|
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战