文章目录
- 一、日期函数
- 1.current_date()
- 2.current_time()
- 3.current_timestamp
- 4. date_add 穿越未来
- 5.date_sub 回到过去
- 6.datediff
- 案例
- 二、字符串函数
- 2.1charset
- 2.2 concat ——拼接字符串
- 2.3 ucase——转化成大写
- 2.4 lcase——转化成小写
- 2.5 left()
- 2.6replace()
- 2.7substring()
- 2.8 ltrim 和rtrim
- 使用案例
- 三、数学函数
- 四、其他函数
- user()
- md5()
- ifnull(val1,val2)
一、日期函数
1.current_date()
这是一个日期函数,表示当前的日期。
2.current_time()
这是一个时间函数,表示当前时间。
注意区分两个概念:日期和时间。
一般情况下:日期指的是,年月日。
时间指的是,时分秒。
3.current_timestamp
时间戳。
获取日期和时间,也就是详细到年月日,时分秒。
4. date_add 穿越未来
在日期的基础上,加上一个日期。
interval:时间间隔。
mysql> select date_add(‘2024-5-11’,interval 100 day);
还可以获取当前时间,然后添加上year/month/day/hour/minute/second
5.date_sub 回到过去
在日期的基础上,减去一个日期。
interval:时间间隔。
mysql> select date_sub(‘2024-5-11’,interval 100 day);
还可以获取当前时间,然后添加上year/month/day/hour/minute/second。
6.datediff
计算两个日期之间相差多少天。
案例
创建一张表,记录生日
mysql> create table tmp(
-> id bigint primary key auto_increment,
-> birthday date
-> );
向表中插入一些数据:
mysql> insert into tmp(birthday) values(current_date());
mysql> insert into tmp(birthday) values(‘1949-10-01’);
mysql> insert into tmp(birthday) values(‘2049-10-01’);
mysql> insert into tmp(birthday) values(current_time());
mysql> insert into tmp(birthday) values(date(current_time()));
可以看到,就算插入的是当前时间,显示时仍然是以日期的方式显示的。
此时可以认为:
- 1.所有的函数,底层都是用同一个日期函数。
- 2.MySQL有一点小bug,时间能插入日期类型的数据中。
案例2:
创建一个留言表
mysql> create table msg(
id int primary key auto_increment,
content varchar(100) not null, senddtime datetime
);
插入数据:
现在有一个要求,请查询20分钟内发布过的消息。
mysql> select id,content,sendtime from msg where sendtime > date_sub(now(),interval 30 minute);
另一种查询方法也可以:
mysql> select id,content,sendtime from msg where now() < date_add(sendtime,interval 30 minute);
二、字符串函数
2.1charset
获取msp表的content列的字符集.
mysql> select charset(content) from msg;
2.2 concat ——拼接字符串
这个函数就像c语言学过的strcat函数,将字符串拼接。
2.3 ucase——转化成大写
mysql> select ucase(‘hello,你好,worldasddd’);
2.4 lcase——转化成小写
mysql> select lcase(‘hello,你好,BBBBBBBBBBd’);
2.5 left()
left(string, length);
从string左边开始提取length个字符。
2.6replace()
replace(string,src,dst);
在string字符串中,查找src字符串,找到并替换成dst字符串。
2.7substring()
substring(str,position,length);
从str的position位置开始,取length个字符。
2.8 ltrim 和rtrim
ltrim去除字符串左边的空格
rtrim去除右边的空格。
trim去除左右两边的空格。
但是不去除中间的空格。
使用案例
要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
mysql> select concat(‘考生姓名:’, name, ‘恭喜你,你的总分是:’,chinese+math+english,’ 语文成绩:‘,chinese, ’ 数学成绩:’ ,math,’ 英语成绩: ',english) as 分数 from exam_result;
求学生表中学生姓名占用的字节数.
mysql> select name,length(name) from exam_result;
原因是,使用的字符编码默认是utf8的。
一个汉字占3个字节。
注意:字符和数字占1字节。
mysql> select length(‘abc123’);
将EMP表中所有名字中有S的替换成’上海’
mysql> select ename,replace(ename,‘S’,‘上海’) from emp;
截取EMP表中ename字段的第二个到第三个字符。
mysql> select substring(ename,2,2) from emp;
以首字母小写的方式显示所有员工的姓名
mysql> select ename, concat( substring(lcase(ename),1,1), substring(ename,2)) from emp ;
注意:上面的案例,都没有修改表格本身,而是将满足条件的表内容提取出来并修改,再聚合展现出来。
对表格本身的内容没有修改。
想要修改表格本身的内容,一般用update才会修改。
三、数学函数
三个取整方式:
向上取整,向下取整,0向取整。
ceiling函数:向上取整。ceiling翻译:天花板。
floor函数:向下取整。floor翻译:地板。
四、其他函数
user()
当前用户。
md5()
语法:md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。
形成一个摘要,产生等长字符串。
不管这个参数str有多短多长,都会形成一个固定的摘要。
ifnull(val1,val2)
判断第一个val1是不是null,如果第一个是null,返回val2。
如果第一个不是null,返回val1。