ToB企服应用市场:ToB评测及商务社交产业平台
标题:
2. 函数
[打印本页]
作者:
罪恶克星
时间:
2022-8-27 03:34
标题:
2. 函数
目录
聚集函数
字符串函数
字符串长度
合并字符串
字符串插入
字符串替换
字符串大小写转换
字符串截取
字符串扩容填充
字符串两侧删除
字符串重复生成
空字符串生成
字符串比较
字符串定位
字符串翻转
日期和时间函数
当前
比较
加减
转换
数学函数
类型转换函数
隐式转换
显式转换
部分流程控制函数
聚集函数
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)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4