目录
函数
日期函数
介绍
- 日期 -- 年月日
- 时间 -- 时分秒
- 时间戳 -- 年月日+时分秒 =now()
格式:
date()
datetime参数 -- 字符串形式
会返回日期部分:
但如果不是时间戳格式,将返回null:
函数可以嵌套使用 -- date(now())
时间的加减
date_add()
返回日期计算后的结果,参数 -- (日期/时间戳 , interval n year/day/minute/second)
- n是数字
- 会自动进行日历换算
date_sub()同理
datediff()
返回两个日期相减的结果(单位:day),参数 -- (日期1,日期2)
使用场景
记录生日
create table tmp( id int primary key auto_increment, birthday date );
只要插入的数据中包含日期,就可以自动转换,返回日期的部分
- 类似于隐式类型转换
但最好还是我们直接传入/手动转换(使用date()),更清楚一些
留言板
留言板基本信息包括:评论内容+时间戳:
create table msg ( id int primary key auto_increment, content varchar(30) not null, sendtime datetime );
查询两分钟内发布的帖子:
select * from msg where sendtime > date_sub(now() , interval 2 minute);
字符串函数
charset()
查看字符集编码格式
- 可以在某些数据异常乱码时查找错误
查询某表某列的格式: select charset(列名) from 表
instr()
查找子串在源串中出现的位置,参数 -- (源串,子串)
- 起始位置为1
转换大小写
u/lcase(字符串)
- 转换成大/小写
- 遇到数字不转换
截取子串
left()
从左边起截取n个字符,参数 -- (源串,字符个数)
right()
从右边起截取n个字符,参数 -- (源串,字符个数)
substring()
从给定位置开始,截取n个字符,参数 -- (源串,起始位置,字符个数)
- 起始位置还是从1开始
如果想显示从起始位置开始的所有字符,就不用填写第三个参数:
length(字符串)
返回字符串长度, 以字节为单位
- 空串为0
- utf8下,汉字字符占3个字节,字母/数字字符占1个字节
raplace()
查找源串中的"目的子串",然后将该子串替换成"替换串"
- 参数 -- (源串,目的子串,替换串)
只是字符串级别的更换,并没有实际更换数据
去掉左/右空格
避免因多余空格导致的数据比对不成功
ltrim()
去除左边空格
rtrim()
去除右边空格
trim()
去除左右两边空格
使用
表数据
CREATE TABLE exam_result ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL COMMENT '同学姓名', chinese float DEFAULT 0.0 COMMENT '语文成绩', math float DEFAULT 0.0 COMMENT '数学成绩', english float DEFAULT 0.0 COMMENT '英语成绩' ); INSERT INTO exam_result (name, chinese, math, english) VALUES ('小明', 67, 98, 56), ('小红', 87, 78, 77), ('李三', 88, 98, 90), ('赵四', 82, 84, 67), ('李毅', 55, 85, 45), ('钱五', 70, 73, 78), ('宋任', 75, 65, 30);
自定义格式化显示
可以像使用c语言中的printf一样使用concat
假如我们要格式化显示每个人的成绩:
select concat(name,'的语文成绩是',chinese,'分,数学成绩是',math,'分,英语成绩是',english,'分') as '成绩表' from exam_result;
将特定列替换字符
以首字母小写的方式显示名字
我们这里使用雇员信息表 -- scott_data.sql · YoungMLet/scott_data - Gitee.com
先将姓名中的第一个字母和其他部分分开 -- left和substring结合使用:
然后将第一个字母转换成小写字母 -- lcase:
最后将两部分拼接在一起 -- concat:
select concat(lcase(left(ename,1)),substring(ename,2)) new_name from emp;
数学函数
进制转换
bin()
转换浮点数时,会先取整,再转换为二进制
conv()
参数 -- (数字,原进制,新进制)
取整
取整有很多方式
我们常用的是四舍五入法
0向取整
直接去掉小数部分
- 3.1 / 3.7 -> 3
- -3.1 / -3.7 -> -3
- c语言中使用的就是0向取整 -- 10/3=3
向上取整
统一朝着让数字变大的方向取整
- ceiling()就是以向上取整的方式进行取整
向下取整
顾名思义,和向上取整同理,只不过是朝着让数字变小的方向取整
- floor():
format()
将数值格式化为特定的字符串表示形式
- 添加千位分隔符+指定精度
- 参数 -- (浮点数,精度位数)
用于显示货币或其他需要特定格式的数值
生成随机数
rand()返回0.0~1.0之间的随机浮点数
如果想要得到0~100之间的随机浮点数,可以对结果*100:
如果想要控制生成的是整数/指定精度的小数,通过嵌套使用format():
其他函数
加密函数
用户密码一定要在数据库中加密保存
不然一旦数据库泄漏,用户隐私也就泄漏了
md5()
不算严格意义上的加密
- 密码 -哈希算法> 32位长度的摘要(固定长度)
- 这样我们在定义密码字段长度时,可以设置成char(32)
在查找时,因为表中存入的是经过摘要的字符串
- 所以也需要将新传入的密码形成摘要,然后就可以和表中数据做对比了
password()
数据库提供的,比md5()更复杂的密码加密方式
- 一般使用这种方式作为密码加密方式
ifnull(a,b)
- 如果a!=null,返回a
- a为null,返回b
类似c/cpp语法中的a==b?a:b
user()
查询当前用户