目录

  • 一、数据准备
  • 二、字符串函数
  • 1.拼接字符串函数-concat
  • 2.计算字符串的长度-length
  • 3.截取字符串
  • 4.去除空格
  • 三、数学函数
  • 1.四舍五入-round
  • 2.随机数-rand
  • 四、日期时间函数
  • 1.当前日期
  • 2.当前时间
  • 3.当前日期+时间


前言:MySQL内置函数可以在select、where、order by后面使用

一、数据准备

-- 创建student库:student
create database student default character set utf8 collate utf8_general_ci;
/*
创建学生表:students,
学生号为Sid,数据类型为varchar(10),主键,
姓名为name,数据类型为varchar(10),
性别为sex,数据类型为varchar(1),
年龄为age,数据类型为int,
班级为class,数据类型为varchar(10),
身份证号为card,数据类型为varchar(20),
城市为city,数据类型为varchar(20)
*/
create table students(
	Sid varchar(10) primary key,
	name varchar(10),
	sex varchar(1),
	age int,
	class varchar(10),
	card varchar(20),
	city varchar(20)
);
-- 向学生表插入数据
insert into students values
('001','王昭君','女',30,'3班','634101199003157654','北京'),
('002','诸葛亮','男',29,'2班','110102199104262354','上海'),
('003','鲁班大师','男',30,'1班','820102199003047654','南京'),
('004','白起','男',35,'4班','840202198505177654','安徽'),
('005','大乔','女',28,'3班','215301199204067654','天津'),
('006','孙尚香','女',25,'1班','130502199506137654','河北'),
('007','百里玄策','男',39,'2班','140102198107277654','山西'),
('008','小乔','女',25,'3班',null,'河南'),
('009','百里守约','男',31,'1班','','湖南'),
('010','妲己','女',24,'2班','440701199607147654','广东'),
('011','廉颇','男',30,'1班','110202199005017754','北京'),
('012','孙膑','男',36,'3班','650102198401297655','新疆');
/*
创建课程表:courses
课程号为Cid,数据类型为varchar(10),主键,
课程名为Cname,数据类型为varchar(10)
*/
create table courses(
	Cid varchar(10) primary key,
	Cname varchar(10)
);
-- 向课程表插入数据
insert into courses values
('01','语文'),
('02','数学'),
('03','英语'),
('04','生物'),
('05','政治'),
('06','地理'),
('07','物理');
/*
创建分数表:scores,
学生号为Sid,数据类型为varchar(10),学生表外键,
课程号为Cid,数据类型为varchar(10),课程表外键,
分数为score,数据类型为tinyint
*/
create table scores(
	Sid varchar(10),
	Cid varchar(10),
	score tinyint,
	foreign key (Sid) references students(Sid),
	foreign key (Cid) references courses(Cid)
);
-- 向分数表插入数据
insert into scores values
('001','01',49),
('001','02',75),
('001','03',54),
('001','04',66),
('001','05',59),
('001','06',94),
('002','01',58),
('002','02',57),
('002','03',74),
('002','04',90),
('002','05',55),
('002','06',64),
('003','01',83),
('003','02',73),
('003','04',50),
('003','05',67),
('003','06',87),
('004','01',97),
('004','02',50),
('004','03',56),
('004','04',69),
('004','05',72),
('004','06',51),
('005','01',54),
('005','02',66),
('005','03',61),
('005','05',49),
('005','06',86),
('006','01',97),
('006','02',77),
('006','03',66),
('006','04',76),
('007','01',49),
('007','02',40),
('007','03',99),
('007','04',86),
('007','05',78),
('007','06',55),
('008','01',82),
('008','02',72),
('008','03',98),
('008','05',47),
('008','06',68),
('009','01',84),
('009','02',56),
('009','03',74),
('009','04',64),
('009','05',79),
('009','06',97),
('010','02',85),
('010','03',85),
('010','04',90),
('010','05',93),
('010','06',61),
('011','01',85),
('011','02',63),
('011','03',71),
('011','04',58),
('011','05',80),
('011','06',66);

二、字符串函数

1.拼接字符串函数-concat

语法:concat(参数1,参数2,参数3....) 作用:把所有的参数连接成一个完整的字符串
注意:参数可以是数字,也可以是字符串

练习1:

-- 把12,34.5,‘abc1中’拼接成一个字符串
select concat(12,34.5,'abc1中');

练习2:

-- 把students表中name和age字段数据拼接成一个字符串显示出来
select concat(name,age) from students;

2.计算字符串的长度-length

语法:length(参数) 作用:计算字符串的长度
注意:一个utf8格式的汉字的长度为3

练习1:

-- 计算‘123abc阿凡达’字符串的长度
select length('123abc阿凡达');

练习2:

-- 计算students表中name字段的长度
select length(name) from students;

3.截取字符串

注意:这里汉字和字母的长度都为1;截取长度只能为正整数
左截取
语法:left('字符串',截取长度) 作用:截取指定长度的字符串的左边部分

练习1:

-- 截取‘123abc阿凡达’字符串的左边部分‘123’
select left('123abc阿凡达',3);

练习2:

-- 截取students表中name字段长度为9的左边部分姓
select left(name,1) from students where length(name)=9;

右截取
语法:right('字符串',截取长度) 作用:截取指定长度的字符串的右边部分

练习1:

-- 截取‘123abc阿凡达’字符串的右边部分‘阿凡达’
select right('123abc阿凡达',3);

练习2:

-- 截取students表中name字段长度为12的右边部分名
select right(name,2) from students where length(name)=12;

中间截取
语法:substring('字符串',开始位置,截取长度) 作用:截取指定长度的字符串的任意部分
注意:开始位置可以为正整数、0、负整数;开始位置是包含在截取的里面的

练习1:

-- 截取‘123abc阿凡达’字符串的‘abc’部分
select substring('123abc阿凡达',4,3);

练习2:

-- 截取students表的card字段的出生年月日
select substring(card,7,8) from students;

练习3:

-- 查询students表中的学生信息,并按照生日从大到小排序(提示1989年的比1990年的大)
select * from students order by substring(card,7,8);

4.去除空格

去除左侧空格
语法:ltrim('字符串') 作用:去除字符串左侧的空格

练习1:

-- 去除字符串‘  123abc阿凡达  ’左侧的空格
select ltrim('  123abc阿凡达  ');

去除右侧空格
语法:rtrim('字符串') 作用:去除字符串右侧的空格

练习1:

-- 去除字符串‘  123abc阿凡达  ’右侧的空格
select rtrim('  123abc阿凡达  ');

去除两侧空格
语法:trim('字符串') 作用:去除字符串两侧的空格

练习1:

-- 去除字符串‘  123abc阿凡达  ’两侧的空格
select trim('  123abc阿凡达  ');

三、数学函数

1.四舍五入-round

语法:round(要处理的数,保留几位小数) 作用:四舍五入,保留小数点后几位小数

练习1:

-- 8.3579四舍五入,保留整数位
select round('8.3579',0);

练习2:

-- 查询students表中学生的平均年龄,并保留2位小数
select round(avg(age),2) from students;

2.随机数-rand

语法:rand() 作用:返回一个从0到1.0的随机小数

练习1:

-- 返回一个从0到1.0的随机小数
select rand();

练习2:

-- 从students表中随机抽取一个学生(随机排序取第一个)
select * from students order by rand() limit 1;

四、日期时间函数

1.当前日期

语法:current_date() 作用:查看当前日期(格式:yyyy-mm-dd)

练习1:

-- 查看当前日期
select current_date();

2.当前时间

语法:current_time() 作用:查看当前时间(格式:HH-mm-ss)

练习1:

-- 查看当前时间
select current_time();

3.当前日期+时间

语法:now() 作用:查看当前日期+时间(格式:yyyy-mm-dd HH-mm-ss)

练习1:

-- 查看当前日期+时间
select now();