本篇目标:
- 了解 mysql 内置函数的概念及作用,掌握函数的基本使用方式。
- 掌握常用字符串函数、数值函数、日期函数的使用方法,能够对数据进行简单处理。
- 掌握聚合函数的使用,能够完成数据统计与分析操作。
- 掌握条件判断函数的使用,实现 sql 中的数据逻辑处理。
- 能够在实际 sql 查询中灵活运用内置函数,提高数据查询和处理能力。
一.函数
1.日期函数
1.1.介绍与简单使用
| 函数名称 | 描述 |
|---|---|
| current_date() | 当前日期 |
| current_time() | 当前时间 |
| current_timestamp() | 当前时间戳 |
| date(datetime) | 返回 datetime 参数的日期部分 |
| date_add(date, interval d_value_type) | 在 date 中添加日期或时间,interval 后的数值单位可以是:year、month、day、hour、minute、second |
| date_sub(date, interval d_value_type) | 在 date 中减去日期或时间,interval 后的数值单位可以是:year、month、day、hour、minute、second |
| datediff(date1, date2) | 两个日期的差,单位是天 |
| now() | 当前日期时间 |
使用案例:
<1>.获得年月日:
select current_date();

<2>.获得时分秒:
select current_time();

<3>.获得时间戳,也就是具体的时间:
select current_timestamp();

select now();

注意:在 mysql 中,current_timestamp() 和 now() 返回值和功能基本一致,主要区别在于前者属于 sql 标准函数,后者是 mysql 中更常用、更简洁的写法。
<4>.在日期的基础上加日期:
select date_add('2017-10-28', interval 10 day);
select date_add('2017-10-28', interval 10 year);
select date_add('2017-10-28', interval 10 month);
<5>.在日期的基础上减去时间:
select date_sub('2027-10-1', interval 2 day);
select date_sub('2027-10-1', interval 2 month);
select date_sub('2027-10-1', interval 2 year);
<6>.计算两个日期之间相差多少天:
select datediff('2027-10-10', '2066-9-1');

1.2.案例演示
<1>.创建一张表,记录生日,
create table tmp( id int primary key auto_increment, birthday date );
insert into tmp (birthday) values(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('少偶好甜', now());
当我们想要显示所有留言信息,发布日期只显示日期,不用显示具体时间时:
select content,date(sendtime) from msg;

如果是查询在2分钟内发布的帖子,可以如图理解:

insert into msg(content,sendtime) values('少偶99', now());
select * from msg where date_add(sendtime, interval 2 minute) > now();
2.字符串函数
2.1.介绍
| 函数名称 | 描述 |
|---|---|
charset(str) | 返回字符串的字符集 |
concat(string1 [, string2, ...]) | 连接多个字符串 |
instr(string, substring) | 返回 substring 在 string 中首次出现的位置,未找到返回 0 |
ucase(string) | 将字符串转换为大写 |
lcase(string) | 将字符串转换为小写 |
left(string, length) | 从字符串左边截取 length 个字符 |
length(string) | 返回字符串的长度(字节数) |
replace(str, search_str, replace_str) | 将字符串 str 中的 search_str 替换为 replace_str |
strcmp(string1, string2) | 逐字符比较两个字符串的大小 |
substring(str, position [, length]) | 从 str 的 position 位置开始,截取 length 个字符(省略 length 时截取到末尾) |
ltrim(string) | 去除字符串左侧空格 |
rtrim(string) | 去除字符串右侧空格 |
trim(string) | 去除字符串两端空格 |
2.2.使用实例
注意:此次出现的表是之前已经创建好了的
<1>.获取emp表的ename列的字符集:
select charset(ename) from emp;

<2>.要求显示exam_result表中的信息,显示格式:“xxx的语文是xxx分,数学xxx分,英语xxx分”:
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from exam_result;

<3>.求学生表中学生姓名占用的字节数:
select length(name), name from exam_result;

注意:length函数返回字符串长度,以字节为单位,如果是多字节字符则计算多个字节数; 如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数 (与字符集编码有关)
例如:

<4>.将emp表中所有名字中有s的替换成'上海':
select replace(ename, 's', '上海') ,ename from emp;

<5>.字符串转大小写:
select ucase('asdddf');
select ucase('aaaddf');
select lcase('asdfgh');
select lcase('assdgsgh');
<6>.截取emp表中ename字段的第二个到第三个字符:
select substring(ename, 2, 2), ename from emp;

<7>.以首字母小写的方式显示所有员工的姓名:

<8>.去除字符串空格:
select ltrim(' sdssf');
select rtrim('sdssf ');
select rtrim(' sdssf ');
<8>.逐字符比较两个字符串的大小:
select strcmp('fgdsf','dsdsd');

3.数学函数
1.介绍
| 函数名称 | 描述 |
|---|---|
abs(number) | 返回绝对值 |
bin(decimal_number) | 将十进制数转换为二进制 |
hex(decimal_number) | 将十进制数转换为十六进制 |
conv(number, from_base, to_base) | 在不同进制之间转换 |
ceiling(number) | 向上取整 |
floor(number) | 向下取整 |
format(number, decimal_places) | 格式化数字,并保留指定的小数位数 |
rand() | 返回 [0.0, 1.0) 范围内的随机浮点数 |
mod(number, denominator) | 取模,求余数 |
2.使用案例
<1>.绝对值:
select abs(-1); select abs(-100);

<2>.进制转换
select bin(10); select bin(100);

select hex(16); select hex(160);

select conv(10,10,2); //10进制到二进制的转换 select conv(10,10,3); //10进制到三进制的转换 select conv(10,10,16); //10进制到十六进制的转换

<3>.取整:
select ceiling(23.04); select floor(23.04);

<4>.保留2位小数位数(小数四舍五入):
select format(12.3456, 2); select format(3.1415926, 2); select format(3.1415926, 10);

<5>.产生随机数:
select rand(); select rand();

想要较大的值,直接乘以10的倍数即可:
select rand()*1000;

<6>.取模,求余数:
select mod(10,2); select mod(10,3); select mod(100,5.6);

4.其它函数
<1>.user() 查询当前用户:
select user();

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

<3>.database()显示当前正在使用的数据库:
select database();

<4>.password()函数,mysql数据库使用该函数对用户加密:
select password('root');

<5>.ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值:
select ifnull('abc', '123');
select ifnull(null, '123');
总结:
本篇我们学习了 mysql 中常用的内置函数,包括日期函数、字符串函数、数学函数以及其它常用函数。
日期函数主要用于获取和处理日期、时间数据,能够方便地完成时间计算、日期格式化等操作;字符串函数可以对字符串进行拼接、截取、替换、大小写转换等处理;数学函数提供了绝对值、取整、随机数、进制转换等常见数学运算;此外,还学习了 user()、database()、md5()、ifnull() 等实用函数,在实际开发中能够帮助我们快速完成数据处理和业务逻辑。
熟练掌握这些内置函数,不仅能够简化 sql 语句,提高开发效率,还能减少应用层代码的编写,使数据处理更加灵活、高效,为后续学习 mysql 的高级查询、视图、存储过程等内容打下坚实的基础。
到此这篇关于mysql数据库原理与实践之内置函数详解的文章就介绍到这了,更多相关mysql内置函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论