【MYSQL】内置函数

2023-12-13 03:29:05

目录

前言

一、日期函数

案例:创建一个留言表

二、字符串函数

三、数学函数?编辑

四、其它函数


前言

本篇博客介绍MYSQL中内置的函数,例如:时间函数、字符串函数、数学函数……

希望各位看完能有所收获。


一、日期函数

  • 获取年月日:

mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2023-11-30 ? ? |
+----------------+
1 row in set (0.01 sec)

  • 获取时分秒:

mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 21:51:44 ? ? ? |
+----------------+
1 row in set (0.00 sec)

  • 获取时间戳

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2023-11-30 21:52:14 |
+---------------------+
1 row in set (0.00 sec)

  • 在日期的基础上加上一段时间:
    ?

mysql> select date_add('2023-11-30',interval 10 day);
+----------------------------------------+
| date_add('2023-11-30',interval 10 day) |
+----------------------------------------+
| 2023-12-10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
+----------------------------------------+
1 row in set (0.00 sec)

  • 在日期的基础上减去时间:

mysql> select date_sub('2023-11-30',interval 10 day);
+----------------------------------------+
| date_sub('2023-11-30',interval 10 day) |
+----------------------------------------+
| 2023-11-20 ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
+----------------------------------------+
1 row in set (0.00 sec)

  • 计算两个日期之间相差多少天:

mysql> select datediff('2023-11-30','2023-2-3');
+-----------------------------------+
| datediff('2023-11-30','2023-2-3') |
+-----------------------------------+
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 300 |
+-----------------------------------+
1 row in set (0.01 sec)

案例:创建一个留言表

//创建表

mysql> create table msg(?
? ? -> id int primary key auto_increment,
? ? -> content varchar(30) not null,
? ? -> sendtime datetime
? ? -> );
Query OK, 0 rows affected (0.02 sec)

//插入数据

mysql> insert into msg(content,sendtime) values('大鹏一日同风起,扶摇直上九万里',now());
Query OK, 1 row affected (0.01 sec)
?

mysql> insert into msg(content,sendtime) values('仰天大笑出门去','2023-11-30 12:00:00');
Query OK, 1 row affected (0.00 sec)
?

//查看最近二十分钟内的留言

//要求:

//发送时间 + 20分钟 > 现在时间

//现在时间 - 发送时间 < 20分钟

mysql> select * from msg where date_add(sendtime,interval 20 minute) > now();
+----+-----------------------------------------------+---------------------+
| id | content ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | sendtime ? ? ? ? ? ?|
+----+-----------------------------------------------+---------------------+
| ?1 | 大鹏一日同风起,扶摇直上九万里 ? ? ? ? ? ? ? ?| 2023-11-30 23:25:58 |
+----+-----------------------------------------------+---------------------+
1 row in set (0.00 sec)


二、字符串函数

  • 获取emp表的ename列的字符集

mysql> select charset(content) from msg;
+------------------+
| charset(content) |
+------------------+
| utf8 ? ? ? ? ? ? |
| utf8 ? ? ? ? ? ? |
+------------------+
2 rows in set (0.00 sec)

  • 要求显示数据并且拼接在一起

mysql> select concat(id,'号的留言是:',content,'---',sendtime) from msg;
+--------------------------------------------------------------------------------------+
| concat(id,'号的留言是:',content,'---',sendtime) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
+--------------------------------------------------------------------------------------+
| 1号的留言是:大鹏一日同风起,扶摇直上九万里---2023-11-30 23:25:58 ? ? ? ? ? ? ? ? ? ? |
| 3号的留言是:仰天大笑出门去---2023-11-30 12:00:00 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
+--------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

  • 求留言表中留言占用的字节数

mysql> select id,length(content) from msg;
+----+-----------------+
| id | length(content) |
+----+-----------------+
| ?1 | ? ? ? ? ? ? ?45 |
| ?3 | ? ? ? ? ? ? ?21 |
+----+-----------------+
2 rows in set (0.00 sec)

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

  • 将表中的'孙'替换成'张'

//孙权就变成了王权

//但是我们得到的是一张临时表结构

mysql> select replace(name,'孙','王'),english,chinese,math from exam_result;
+---------------------------+---------+---------+------+
| replace(name,'孙','王') ? | english | chinese | math |
+---------------------------+---------+---------+------+
| 唐三藏 ? ? ? ? ? ? ? ? ? ?| ? ? ?56 | ? ? ?67 | ? 98 |
| 猪悟能 ? ? ? ? ? ? ? ? ? ?| ? ? ?90 | ? ? ?88 | ? 98 |
| 曹孟德 ? ? ? ? ? ? ? ? ? ?| ? ? ?67 | ? ? ?70 | ? 60 |
| 刘玄德 ? ? ? ? ? ? ? ? ? ?| ? ? ?45 | ? ? ?55 | ? 85 |
| 王权 ? ? ? ? ? ? ? ? ? ? ?| ? ? ?78 | ? ? ?70 | ? 73 |
| 宋公明 ? ? ? ? ? ? ? ? ? ?| ? ? ?30 | ? ? ?75 | ? 65 |
| 马超 ? ? ? ? ? ? ? ? ? ? ?| ? ? ?65 | ? ? ?65 | ? 65 |
+---------------------------+---------+---------+------+
7 rows in set (0.00 sec)
?

//我们再查看表数据的时候我们会发现表中的数据还是孙权

//表中的数据并不会被修改

mysql> select * from exam_result;
+----+-----------+---------+------+---------+
| id | name ? ? ?| chinese | math | english |
+----+-----------+---------+------+---------+
| ?1 | 唐三藏 ? ?| ? ? ?67 | ? 98 | ? ? ?56 |
| ?3 | 猪悟能 ? ?| ? ? ?88 | ? 98 | ? ? ?90 |
| ?4 | 曹孟德 ? ?| ? ? ?70 | ? 60 | ? ? ?67 |
| ?5 | 刘玄德 ? ?| ? ? ?55 | ? 85 | ? ? ?45 |
| ?6 | 孙权 ? ? ?| ? ? ?70 | ? 73 | ? ? ?78 |
| ?7 | 宋公明 ? ?| ? ? ?75 | ? 65 | ? ? ?30 |
| ?8 | 马超 ? ? ?| ? ? ?65 | ? 65 | ? ? ?65 |
+----+-----------+---------+------+---------+
7 rows in set (0.00 sec)

  • 将小写字母显示为大写字母

mysql> select ucase('abcdefg');
+------------------+
| ucase('abcdefg') |
+------------------+
| ABCDEFG ? ? ? ? ?|
+------------------+
1 row in set (0.00 sec)


三、数学函数

这里函数都很通俗移动,在这里只讲解一下四种取整规则:

  • 向零取整

在取整数的时候直接舍弃小数部分的,叫做向零取整,因为数的变化都是向0靠近。?

?

  • 向上取整?

?在取整的时候,自动向上进一位。

  • ?向下取整

?

  • 四舍五入??

四、其它函数

函数名称描述
user()查询当前用户
md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
database()显示当前正在使用的数据库
password()MySQL数据库使用该函数对用户加密
ifnull(val1, val2)如果val1为null,返回val2,否则返回val1的值

案例1:

//查询当前用户

mysql> select user();
+--------+
| user() |
+--------+
| root@ ?|
+--------+
1 row in set (0.00 sec)

案例2:

//我们在储存密码的时候,肯定不可能就直接把密码存进去

//而是先通过加密之后再存

//加密就要用到函数md5

//先创建一张用户表

mysql> create table user(
? ? -> name varchar(10) not null,
? ? -> password varchar(20) not null
? ? -> );
Query OK, 0 rows affected (0.02 sec)

?
//插入用户名和加密后的密码

mysql> insert into user values('青衫哥',md5('12345'));
Query OK, 1 row affected (0.01 sec)

mysql> insert into user values('张三',md5('1'));
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+-----------+----------------------------------+
| name ? ? ?| password ? ? ? ? ? ? ? ? ? ? ? ? |
+-----------+----------------------------------+
| 青衫哥 ? ?| 827ccb0eea8a706c4c34a16891f84e7b |
| 张三 ? ? ?| c4ca4238a0b923820dcc509a6f75849b |
+-----------+----------------------------------+
2 rows in set (0.00 sec)
?

//可以看出,不管输入长度怎么样,加密之后的长度都是一样的。

那么我们到时候怎么确定输入的密码是否正确呢?

mysql> select * from user where name ='张三' and password =md5('1');
+--------+----------------------------------+
| name ? | password ? ? ? ? ? ? ? ? ? ? ? ? |
+--------+----------------------------------+
| 张三 ? | c4ca4238a0b923820dcc509a6f75849b |
+--------+----------------------------------+
1 row in set (0.00 sec

案例3:

//查看当前使用的数据库

mysql> select database();
+------------+
| database() |
+------------+
| yz_test ? ?|
+------------+
1 row in set (0.00 sec)

案例4:

//MYSQL中还给我们提供了一个输入密码的函数

//这个在使用中是最常见的

mysql> select password('1234');
+-------------------------------------------+
| password('1234') ? ? ? ? ? ? ? ? ? ? ? ? ?|
+-------------------------------------------+
| *A4B6157319038724E3560894F7F932C8886EBFCF |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

案例5:

//ifnull函数的使用

//这个比较像C++中的三目运算符

mysql> select ifnull('abc','123');
+---------------------+
| ifnull('abc','123') |
+---------------------+
| abc ? ? ? ? ? ? ? ? |
+---------------------+
1 row in set (0.00 sec)

mysql> select ifnull(null,'123');
+--------------------+
| ifnull(null,'123') |
+--------------------+
| 123 ? ? ? ? ? ? ? ?|
+--------------------+
1 row in set (0.00 sec)
?

文章来源:https://blog.csdn.net/qq_65139309/article/details/134722674
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。