一.日期函数
1. 日期函数的介绍及使用

- current_date()
获得年月日:

- current_time()
获得时分秒:

将前二者结合:

- current_timestamp()
获得时间戳:

相同作用的函数还有now():

- date函数
date(datetime),datetime可以是各种日期,也可以是上述的各类函数,最终得到的是所述内容中的日期部分。
常量

各类函数:

- date_add(date, interval d_value_type)
在日期的基础上加日期:
interval后面的数值单位可以是:year、month、day。

date也可以是函数的返回值

- date_add(date, interval d_value_type)
在日期的基础上减日期:
interval后面的数值单位可以是:year、month、day。

date也可以是函数的返回值

- datediff(date1, date2)
l两个日期的差,即date1-date2,单位是天。

当然,date一样可以是函数的返回值

2. 日期函数样例
案例-1:
- 创建一张表,记录生日
create table tmp(
id int primary key auto_increment,
birthday date
);
- 插入数据
insert into tmp(birthday) values(current_date());
insert into tmp(birthday) values(date(current_timestamp()));

案例-2:
- 创建一个留言表
create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
- 插入数据
insert into msg(content,sendtime) values('像风一样', now());
insert into msg(content,sendtime) values('致未来的我', now());
- 显示所有留言信息,发布日期只显示日期,不用显示时间

- 请查询在2分钟内发布的帖子

有两种方式去查询,即通过date_add()比较,或者通过date_sub比较。但都是一个道理。
select * from msg where date_add(sendtime, interval 2 minute) > now();

或者:
select * from msg where date_sub(now(), interval 2 minute) < sendtime;

二.字符串函数
1. 字符串函数的介绍

- charset(str)
获取emp表的ename列的字符集


- concat(string2, […])
连接字符串

- instr(string,substring)
判断substring是否出现在string中,若找到,则返回匹配的起始位置。找不到则返回0

- ucase(string)
小写转大写

- lcase(string)
大写转小写

- left(string2, length)
从string2的左边起提取length个字符

也有right,即从string2的右边起提取length个字符,就不一一演示了。
- length(string)
求字符串长度

- strcmp(string1, string2)
比较string1与string2大小

- 去除空格
ltrim(string) :去除左空格
rtrim(string): 去除右空格
trim(string):去除字符串的左右空格。

其余的函数就通过下面的具体样例演示:
2. 字符串函数样例
- 获取emp表的ename列的字符集

- 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”

- 求学生表中学生姓名占用的字节数

length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)
- 将EMP表中所有名字中有S的替换成’上海’

这种改变是在select时的改变,其并不会改变数据库的数据,仅仅是显示时的替换。
- 截取EMP表中name字段的第二个到第三个字符

- 以首字母小写的方式显示所有员工的姓名
先显示

再拼接

三.数学函数

- 绝对值
select abs(-100.2);

- 十进制转换二进制
select bin(100);

- 十进制转换十六进制
select hex(100);

- 任意进制之间转换
例如:将100从10进制转换成2进制
select conv(100, 10, 2);

- 向上取整
select ceiling(100.5);

- 向下取整
select floor(23.7);

- 格式化,保留小数位数
比如将3.1415926保留两位小数:
select format(3.1415926, 2);

- 产生随机数
select rand();

- 取模,求余
select mod(10, 3);

ps:关于负数取模,这里不演示。
以上的函数都可以嵌套,即任意一个函数的返回值可以充当另一个函数的参数,如果这个函数存在参数,并且类型满足的话。
四.其他函数
- user() 查询当前用户
select user();

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


产生的子串是等长的,这也就意味着,在select按照密码匹配的时候,就需要根据md5(‘密码’)映射出对应的32位字符,才可以匹配成功。
- database()显示当前正在使用的数据库
select database();

- password()函数,MySQL数据库使用该函数对用户加密
select password('123');
相比md5,此函数更普遍受用。

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

扩展:
若数据库执行语句字段包含password字段,则我们在上翻下翻时就查不到历史对应的语句。
文章详细介绍了MySQL中的内置函数,包括日期函数如current_date、current_time和date_add等,字符串函数如concat、charset和instr等,数学函数如abs、bin和hex等,以及其他函数如user、md5和password等,提供了相应的使用样例和应用场景。
591





