目录
1.日期函数
案例1:
创建一张表,记录生日
案例2:
创建一个留言表
2.字符串函数
charset案例1->返回字符串字符集
concat案例连接字符串
instr案例
编辑
ucase案例
lcase案例
left案例
length案例
replace案例
strcmp案例
substring案例
ltrim案例
rtrim案例
trim案例
3.数学函数
abs(number)绝对值
bin(decimal_number)转换为2进制
conv(number,from_base,to_base)进制转换
ceiling(number)向上取整
floor(number)向下取整
format(number,decimal_places)格式化
rand()产生随机数 0-1之间的浮点数
4.其他函数
1.日期函数
| 函数名称 | 描述 |
| current_date() | 当前日期 |
| current_time() | 当前时间 |
| current_timestamp() | 当前时间戳 |
| date(datetime) | 返回datetime参数的日期部分 |
| date_add(tate,interval d_value_type) | 在date中添加日期或时间 interval后的数值单位可以是:year minute second day |
| date_sub(tate,interval d_value_type) | 在date中减去日期或时间 interval后的数值单位可以是:year minute second day |
| datediff(date1,date2) | 两个日期的差,单位是天 |
| now() | 当前日期时间 |
获得年月日:
select current_date();

获得时分秒:
select current_time;

获得时间戳:
select current_timestamp;

在日期的基础上加日期:
select date_sub('2017-10-1', interval 2 day);

我们再举个闰年和非闰年的例子进行加
select date_sub('2017-10-1', interval 2 day);

select date_add("2020,02,28",interval 1 day);

在日期的基础上减去时间:
select date_sub("2020,02,20",interval 1 day);

我们再举个闰年和非闰年的例子进行减
select date_sub("2020,02,29",interval 1 day);

select date_sub("2020,03,01",interval 1 day);

我们再举一个不符合规则的例子:
select date_sub("2020,02,30",interval 1 day);

计算两个日期之间相差多少天:
select datediff('2017-10-10', '2016-9-1');

select datediff('2017-10-10', '1970-9-1');

查询当前时间(与上面获取时间戳差不多)
Select now();

案例1:
创建一张表,记录生日
create table tmp(
id int primary key auto_increment,
birthday date
);


添加当前日期:
insert into tmp values(1,current_date());

案例2:
创建一个留言表
create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);

插入数据
insert into msg(content,sendtime) values('hello1', now());
insert into msg(content,sendtime) values('hello2', now());

select content,date(sendtime) from msg;
select content,time(sendtime) from msg;
查询十分钟内发布的帖子:
select * from msg where date_add(sendtime, interval 10 minute) > now();
2.字符串函数
| charset(set) | 返回字符串字符集 |
| concat(string2[,..........]) | 连接字符串 |
| instr(string,sbustring) | 返回substring在string中出现的位置,没有返回0 |
| ucase(string2) | 转换成大写 |
| lcase(string2) | 转换成小写 |
| left(string2,length) | 从string2中左边起取length个字符 |
| length(length) | string的长度 |
| replace(str,search_str,replace_str) | 在str中用replace_str替换search_str |
| strcmp(string1,string2) | 逐字符比较两字符串的大小 |
| substring(str,postion,[,length]) | 从str的postion开始,取length个字符 |
| ltrim(string) | 去除左边空格 |
| rtrim(string) | 去除右边空格 |
| trim(string) | 去除两端空格 |
charset案例1->返回字符串字符集
- 获取emp表的ename列的字符集
select charset(name) from students;

concat案例连接字符串
- 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
select concat(name,'语文是',chinese,'分',
'数学是',math,'分',
'英语是',english,'分')
from exam_result;


instr案例
select instr("对自己好点er","er");
ucase案例
将字符串全部转换成大写

lcase案例
将字符串全部转换成小写

left案例
从最左边起取length个字符串
select left("对自己好点er",3);

length案例
- 求学生表中学生姓名占用的字节数
select length(name),name from students;
注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关),此处中文占3个字节。
replace案例

strcmp案例
比较两个字符的大小,前面的大返回1,前面的小返回-1.相等返回0.

substring案例
select substring("duizijihaodianer啊对自己好点儿啊",5,10);
select substring(ename,2,2),ename from emp;
ltrim案例

rtrim案例

trim案例

select concat(lcase(substring(ename,1,1)),substring(ename,2))from emp;
3.数学函数
| 函数名称 | 描述 |
| abs(number) | 绝对值函数 |
| bin(decimal_number) | 十进制转换二进制 |
| hex(decimal_number) | 转换成十六进制 |
| conv(number,from_base,to_base) | 进制转换 |
| ceiling(number) | 向上调整 |
| floor(number) | 向下调整 |
| format(number,decimal_places) | 格式化,保留小数位数 |
| hex(decimal_number) | 转换为16进制 |
| rand() | 随机浮点数[0.0,1.0] |
| mod(number,denominator) | 取模,求余 |
abs(number)绝对值

bin(decimal_number)转换为2进制

hex(decimal_number)转换为16进制

conv(number,from_base,to_base)进制转换

ceiling(number)向上取整

floor(number)向下取整

format(number,decimal_places)格式化
保留两位小数(小数四舍五入)

rand()产生随机数 0-1之间的浮点数

如果想要生成0到100的随机数,可以用生成的随机浮点数乘以100,然后再以某种取整方式进行取整。如下

当然这样也不是不可以

4.其他函数
- user()查询当前用户

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

- database()显示当前正在使用的数据库

-
ifnull ( val1 , val2 ) 如果 val1 为 null ,返回 val2 ,否则返回 val1 的值





















