七.MySQL内置函数
1.日期函数
MySQL 日期与时间函数对照表
函数名称 描述 current_date()
当前日期(格式:YYYY-MM-DD) current_time()
当前时间(格式:HH:MM:SS) current_timestamp()
当前日期和时间(等同于 now()
)now()
当前日期和时间 date(datetime)
提取 datetime 值中的日期部分 date_add(date, interval N unit)
给日期加上指定时间间隔(如天、年等) date_sub(date, interval N unit)
从日期中减去指定时间间隔 datediff(date1, date2)
计算两个日期之间的差值(以天为单位)
date_add
和date_sub
的常用单位包括:
year
month
day
hour
minute
second
查询插入3分钟内插入的数据
select * from t_time where date_add(createtime,interval 3 minute)>now();
2.字符串函数
mysql 常用字符串函数总表
函数 含义或功能 示例 charset(str)
返回字符串的字符集 select charset(ename) from emp;
concat(str1, str2, …)
拼接字符串 select concat(name, '是学生') from student;
instr(str, substr)
查找子串出现位置(从 1 开始,找不到返回 0) select instr('mysql', 'sql');
→3
ucase(str)
/upper(str)
转大写 select ucase('hello');
→'HELLO'
lcase(str)
/lower(str)
转小写 select lcase('HELLO');
→'hello'
left(str, n)
从左边截取 n 个字符 select left('hello', 2);
→'he'
right(str, n)
从右边截取 n 个字符 select right('hello', 2);
→'lo'
length(str)
返回 字节长度(视字符集,中文占多字节) select length('中国');
(utf8下)→6
replace(str, from_str, to_str)
替换字符串中的部分 select replace(ename, 's', '上海') from emp; s全部换上海
strcmp(str1, str2)
比较两个字符串大小(按 ascii 排序)返回值 =0 左>右1 左<右-1 select strcmp('abc', 'bcd');
→-1
substring(str, pos, len)
从 str 的第pos个字符起,取 len 个字符 select substring(ename, 2, 2) from emp;
ltrim(str)
去除左侧空格 select ltrim(' hello');
→'hello'
rtrim(str)
去除右侧空格 select rtrim('hello ');
→'hello'
trim(str)
去除左右两端空格 select trim(' hello ');
→'hello'
1.charset 获取表中列的字符集
2.concat 将一行信息输出成一行字符串
3.length 显示字段占用的字节数
4.replace 替换字符串中的部分字符
5.substring截取字符串中的部分字符
substring(str, pos, len) pos代表第几个字符 不是下标
从第0个字符开始 非法
6.隐藏名字
replace() 把名字替换为*
7.以首字母小写方式显示员工姓名
1.substring 把首字母 和 其它字母分开
2.lcase 把大写首字母改为小写
3.concat 拼接起来
3.数学函数
函数名 | 功能说明 | 示例语句 | 示例结果 |
---|---|---|---|
abs(number) | 绝对值函数 | select abs(-100.2); | 100.2 |
ceiling(number) | 向上取整 | select ceiling(23.04); | 24 |
floor(number) | 向下取整 | select floor(23.7); | 23 |
format(number, decimal_places) | 保留小数位(四舍五入) | select format(12.3456, 2); | '12.35' (字符串) |
rand() | 生成 [0,1) 之间随机数 | select rand(); | 0.73892 (浮点) |
mod(number, denominator) | 取模(求余) | select mod(10, 3); | 1 |
bin(decimal_number) | 转为二进制 | select bin(10); | '1010' |
hex(decimal_number) | 转为十六进制 | select hex(255); | 'FF' |
conv(number, from, to) | 进制转换 | select conv('A', 16, 10); | '10' |
rand()生成[0,1)之间是随机数,想生成其它范围的数字呢?
生成[a,b]的随机整数
floor(rand() * (b - a + 1)) + a
eg.rand() [0,1) rand()*101 [0,101)
0~100:select foolr(rand()*101) 向下取整 [0,1)=0 [1,2)=1 ... [99,100)=99 [100,101)=100
可以用ceiling向上取整吗?ceiling(rand()*100)
能出现[0,100]的数字,但只有当rand()==0时才为0,0~100的整数出现的概率不均。
1.abs()绝对值
2.ceiling()向上取整
往大的取
3.floor()向下取整
4.hex()转16进制
5.bin()转二进制
6.conv(值,原进制,目标进制)
4.其它函数
函数名 | 作用说明 | 示例 | 返回值示例 |
---|---|---|---|
user() | 返回当前连接的 MySQL 用户 | select user(); | 'root@localhost' |
database() | 返回当前使用中的数据库名称 | select database(); | 'test' (若未选中数据库则返回 null) |
md5(str) | 对字符串进行 MD5 摘要加密(32位小写十六进制) | select md5('admin'); | '21232f297a57a5a743894a0e4a801fc3' |
password(str) | MySQL 内部使用的加密函数(主要用于授权验证) | select password('root'); | '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' |
ifnull(val1, val2) | 如果 val1 为 null,返回 val2;否则返回 val1 | select ifnull(null, '123'); | '123' |
select ifnull('abc', '123'); | 'abc' |
函数 | 作用就像是... | 你能干嘛用? | 能不能用在业务里 | 推荐吗? | 小白级解释 |
---|---|---|---|---|---|
md5() | 把原文压成一段“身份证号” | 加密密码、接口签名、文件校验、隐藏手机号等 | ✅ 可以 | ✅ 推荐 | 给一段内容打一串 唯一指纹 |
password() | MySQL 系统内部自己用的小保险箱钥匙 | MySQL 系统登录密码用,不给你看、不给你用 | ❌ 不行 | ❌ 不推荐 | 只给 MySQL 自己看的加密结果 |
md5()把里面字符串加密成固定长度32位的新字符串,这个新字符串不能还原成原字符串,但只要原字符串相同加密后的新字符串也相同,用来隐藏原始数据 校验密码是否正确。
ifnull(val1,val2) 就相当于 val1==null?val2:val1;
练习
查找字符串中逗号出现的次数_牛客题霸_牛客网
把字符串的 , 改为空,用原字符串长度 - 去掉 ,字符串的长度