目录
聚集函数
- count([distinct]列名) 统计某列的值总和
- sum([distinct]列名) 统计一列的和(注意必须是数字类型的)
- avg([distinct]列名) 计算一列的平均值(注意必须是数字类型)
- max([distinct]列名) 寻找一列的最大值
- min([distinct]列名) 寻找一列的最小值
# distinct去重
select count(distinct *) from 表名
select sum(distinct quantity) from 表名
select avg(distinct quantity) from 表名
select max(distinct quantity) from 表名
select min(distinct quantity) from 表名
字符串函数
字符串长度
- length(列名) 返回字节数,一个汉字代表三个字节,一个数字/字母代表一个字节。
- char_length(列名) 返回字符数
select length(username) from account //返回9
select char_length(username) from account //返回3
合并字符串
- concat(s1, [s2, s3, ...]) 合并字符串,若任意s为NULL,则返回NULL
- concat_ws(x, [s1, s2, ...]) 合并字符串,若x为NULL,则返回NULL,若s为NULL,则忽略
select concat(username, password) from account;
字符串插入
- insert(s1, x, len, s2) s1为被插入的字符串,x为插入的位置(从1开始数);
len为插入的长度,s2为插入的字符串;
select insert(username, 3, 3, "大帅逼") from account;
字符串替换
- replace(s1, s2, s3) 将s1中的s2替换为s3
select replace(username, "大帅逼", "大丑逼") from account;
字符串大小写转换
- upper(s) 将s转换为全部大写
- lower(s) 将s转换为全部小写
select upper(username) from account
字符串截取
- left(s, n) 截取s的左边n个字符
- right(s, n) 截取s的右边n个字符
- substring(s, x, len) 截取字符串s的x处的往右的长度为len的字符串
select left(username, 2) from account
select substring(username, 2) from account #返回第2个字符串开始的字符串
字符串扩容填充
- lpad(s1, len, s2) s1字符串长度变为len,左侧多余部分用s2填充
- rpad(s1, len, s2) s1字符串长度变为len,右侧多余部分用s2填充
select lpad(username, 10, "??") from account
字符串两侧删除
- ltrim(s) 删除s的左侧字符
- rtrim(s) 删除s的右侧字符
- trim(s) 删除s的两侧字符
# 删除两侧空格
select trim(username) from account
#删除两侧s字符串
select trim(s from username) from account
字符串重复生成
- repeat(s, n) 重复生成n个s字符串并相连
select repeat(username, 3) from account
空字符串生成
- space(n) 生成长度为n的空串
select concat(s1, space(5), s2) from account
字符串比较
- strcpm(s1, s2)
- s1 == s2,返回0
- s1 < s2,返回-1
- s1 > s2,返回1
字符串定位
- locate(s1, s2) 返回s1在s2中第一次出现的位置
字符串翻转
- reverse(s) 翻转字符串
日期和时间函数
当前
- curdate() 生成当前日期
- curtime() 生成当前时间
- localtimestamp() 生成当前时间戳
SELECT CURDATE(), CURTIME(), LOCALTIMESTAMP()
比较
SELECT * FROM work_hours WHERE check_date > '2022-07-01'
加减
-
date_add(日期1, INTERVAL n {year, month, day, minute, second, ...}) 日期1增加n个年月日
-
datediff(日期1, 日期2) 日期1和日期2相差多少天(正负都有)
-
timediff(日期1, 日期2) 日期1和日期2相差多少时间(时分秒表示)
set @a = NOW();
set @b = DATE_ADD(@a,INTERVAL 1 year);
SELECT DATEDIFF(@a,@b)
转换
- date_format(date, format) 将日期转化为字符串
- str_to_date(str, format) 将字符串转化为日期
SELECT DATE_FORMAT(CURDATE(), "%y/%m/%d")
SELECT DATE_FORMAT(CURDATE(), "%y-%m-%d")
SELECT DATE_FORMAT(CURDATE(), "%y/%m/%d")
SELECT DATE_FORMAT(LOCALTIMESTAMP(), "%y/%m/%d %h-%i-%s")
- year()
- month()
- day()
- hour()
- minute()
- second()
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW())
数学函数
- abs(x) 求x的绝对值
- ceiling(x) x向上取整
- floor(x) x向下取整
- round(x, 精度) x取四舍五入,遵循小数点精度
- exp(x) e的x次方
- rand() 0-1之间的随机数
- log(x, n) 以x为底,n为值的对数
- pi() π
- power(x, n) x的n次方
- sqrt(x) x的平方根
- sin(x) cos(x) tan(x) 三角函数(貌似没有arctan这类反函数?)
SELECT ABS(-100), CEILING(1.1), FLOOR(1.1), ROUND(1.5), EXP(2), CAST(RAND()*100 AS SIGNED), LOG(4,2), PI(), POW(2,4), SQRT(4), SIN(PI())
类型转换函数
隐式转换
SELECT 1+'2', CONCAT(1, '2');
显式转换
-
cast(数据 as 数据类型)
-
BINARY[(N)] :二进制字符串,转换后长度小于N个字节
-
CHAR[(N)] :字符串,转换后长度小于N个字符
-
DATE :日期
-
DATETIME :日期时间
-
DECIMAL[(M[,N])] :浮点数,M为数字总位数(包括整数部分和小数部分),N为小数点后的位数
-
SIGNED [INTEGER] :有符号整数
-
TIME :时间
-
UNSIGNED [INTEGER] :无符号整数
-
SELECT CAST(pi() AS SIGNED), CAST('123a456' as SIGNED)
部分流程控制函数
- if(条件表达式, 结果1, 结果2) 即三目运算符(表达式?1:2)
- isnull(值) true 为 1, false 为 0
SELECT IF(1 = 1, 1, 0)
SELECT ISNULL(NULL)
文章评论