2. 函数

mysql 文章 2022-07-15 14:23 0 全屏看文

聚集函数

  • 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       //返回9select 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 accountselect 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)
  1. s1 == s2,返回0
  2. s1 < s2,返回-1
  3. s1 > s2,返回1
字符串定位
  • locate(s1, s2) 返回s1在s2中第一次出现的位置
字符串翻转
  • reverse(s) 翻转字符串

日期和时间函数

当前
  • curdate() 生成当前日期
  • curtime() 生成当前时间
  • localtimestamp() 生成当前时间戳
SELECT CURDATE(), CURTIME(), LOCALTIMESTAMP()

image-20220709144751105

比较
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")

image-20220709150458675

  • year()
  • month()
  • day()
  • hour()
  • minute()
  • second()
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW())

image-20220709150830033


数学函数

  • 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())

image-20220709151526205

类型转换函数

隐式转换
SELECT 1+'2', CONCAT(1, '2');

image-20220709152820199

显式转换
  • 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)
-EOF-