文章目录

  • 一、日期函数
  • 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)

一、日期函数

mysql 内置SQL函数_字符串

1.current_date()

这是一个日期函数,表示当前的日期。

mysql 内置SQL函数_mysql 内置SQL函数_02

2.current_time()

这是一个时间函数,表示当前时间。

mysql 内置SQL函数_adb_03


注意区分两个概念:日期和时间。

一般情况下:日期指的是,年月日。
时间指的是,时分秒。

3.current_timestamp

时间戳。

获取日期和时间,也就是详细到年月日,时分秒。

mysql 内置SQL函数_字符串_04

4. date_add 穿越未来

在日期的基础上,加上一个日期。
interval:时间间隔。

mysql> select date_add(‘2024-5-11’,interval 100 day);

mysql 内置SQL函数_adb_05


还可以获取当前时间,然后添加上year/month/day/hour/minute/second


mysql 内置SQL函数_字符串_06

5.date_sub 回到过去

在日期的基础上,减去一个日期。
interval:时间间隔。

mysql> select date_sub(‘2024-5-11’,interval 100 day);

mysql 内置SQL函数_mysql 内置SQL函数_07


还可以获取当前时间,然后添加上year/month/day/hour/minute/second。

mysql 内置SQL函数_字符串_08

6.datediff

计算两个日期之间相差多少天。

mysql 内置SQL函数_mysql_09

案例

创建一张表,记录生日
 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()));

mysql 内置SQL函数_mysql_10


可以看到,就算插入的是当前时间,显示时仍然是以日期的方式显示的。

此时可以认为:

  • 1.所有的函数,底层都是用同一个日期函数。
  • 2.MySQL有一点小bug,时间能插入日期类型的数据中。

案例2:

创建一个留言表
 mysql> create table msg(
 id int primary key auto_increment,
 content varchar(100) not null, senddtime datetime
 );

插入数据:

mysql 内置SQL函数_adb_11

现在有一个要求,请查询20分钟内发布过的消息。

mysql 内置SQL函数_android_12

mysql> select id,content,sendtime from msg where sendtime > date_sub(now(),interval 30 minute);

mysql 内置SQL函数_字符串_13


另一种查询方法也可以:


mysql> select id,content,sendtime from msg where now() < date_add(sendtime,interval 30 minute);

二、字符串函数

mysql 内置SQL函数_字符串_14

2.1charset

获取msp表的content列的字符集.

mysql> select charset(content) from msg;

mysql 内置SQL函数_mysql_15

2.2 concat ——拼接字符串

这个函数就像c语言学过的strcat函数,将字符串拼接。

mysql 内置SQL函数_android_16

2.3 ucase——转化成大写

mysql> select ucase(‘hello,你好,worldasddd’);

mysql 内置SQL函数_mysql 内置SQL函数_17

2.4 lcase——转化成小写

mysql> select lcase(‘hello,你好,BBBBBBBBBBd’);

mysql 内置SQL函数_mysql_18

2.5 left()

left(string, length);
从string左边开始提取length个字符。

mysql 内置SQL函数_mysql 内置SQL函数_19

2.6replace()

replace(string,src,dst);

在string字符串中,查找src字符串,找到并替换成dst字符串。

2.7substring()

mysql 内置SQL函数_adb_20

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;

mysql 内置SQL函数_adb_21


原因是,使用的字符编码默认是utf8的。

一个汉字占3个字节。

注意:字符和数字占1字节。

mysql> select length(‘abc123’);

mysql 内置SQL函数_adb_22

将EMP表中所有名字中有S的替换成’上海’
mysql> select ename,replace(ename,‘S’,‘上海’) from emp;

mysql 内置SQL函数_android_23

截取EMP表中ename字段的第二个到第三个字符。
mysql> select substring(ename,2,2) from emp;

mysql 内置SQL函数_字符串_24

以首字母小写的方式显示所有员工的姓名
mysql> select ename, concat( substring(lcase(ename),1,1), substring(ename,2)) from emp ;

mysql 内置SQL函数_mysql_25

注意:上面的案例,都没有修改表格本身,而是将满足条件的表内容提取出来并修改,再聚合展现出来。
对表格本身的内容没有修改。
想要修改表格本身的内容,一般用update才会修改。

三、数学函数

mysql 内置SQL函数_android_26

三个取整方式:

向上取整,向下取整,0向取整。

mysql 内置SQL函数_android_27

ceiling函数:向上取整。ceiling翻译:天花板。

floor函数:向下取整。floor翻译:地板。

mysql 内置SQL函数_android_28


mysql 内置SQL函数_adb_29

四、其他函数

user()

当前用户。

md5()

语法:md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。

形成一个摘要,产生等长字符串。

mysql 内置SQL函数_mysql 内置SQL函数_30

不管这个参数str有多短多长,都会形成一个固定的摘要。

mysql 内置SQL函数_adb_31

ifnull(val1,val2)

判断第一个val1是不是null,如果第一个是null,返回val2。
如果第一个不是null,返回val1。