一.日期函数
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字段,则我们在上翻下翻时就查不到历史对应的语句。