一、日期和时间函数

1、获取当前日期的函数
都一样,用法不同

CURDATE() :用于获取系统当前日期
CURRENT_DATE() 用于系统获取当前日期

mysql> select  CURDATE(),CURRENT_DATE(); 

MySQL数据库函数(二)_第1张图片
2、获取当前时间的函数

CURTIME() :用于获取系统当前时间

mysql> select  CURTIME(); 

MySQL数据库函数(二)_第2张图片
3、获取当前日期和时间的函数

CURRENT_TIMESTAMP() :用于获取系统当前日期和时间
LOCALTIME() :用于获取系统当前日期和时间
NOW() :用于获取系统当前日期和时间
SYSDATE(): 用于获取系统当前日期和时间

mysql> select CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();

MySQL数据库函数(二)_第3张图片
4、获取时间戳的函数

UNIX_TIMESTAMP() 用于获取 UNIX 格式的时间戳

mysql> select UNIX_TIMESTAMP(); 

MySQL数据库函数(二)_第4张图片
时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
5、转换时间戳的函数

FROM_UNIXTIME() 用于将 UNIX 格式的时间戳转换为普通格式的时 间

mysql> select  FROM_UNIXTIME(1587693176);         # 添加之前查出的时间戳

MySQL数据库函数(二)_第5张图片
6、获取 UTC 日期的函数

UTC_DATE() :用于获取当前 UTC (世界标准时间) 日期值

mysql> select UTC_DATE();

MySQL数据库函数(二)_第6张图片
7、获取 UTC 时间的函数

UTC_TIME() 用于获取当前 UTC (世界标准时间) 时间值

mysql> select UTC_TIME(); 

MySQL数据库函数(二)_第7张图片
8、获取月份的函数

MONTH(date) :用于返回 date 对应的月份
MONTHNAME(date): 用于返回 date 对应月份的英文全名

mysql> select  MONTH('2020-4-24'),MONTHNAME('2020-4-24');

MySQL数据库函数(二)_第8张图片
9、获取星期的函数

DAYNAME(date) :用于返回 date 对应的工作日的英文名称
DAYOFWEEK(date) :用于返回 date 对应的一周中的索引,1 表示周日,2 表示周一,...... ,7 表示周六
WEEKDAY(date): 用于返回日期对应的工作日索引,0 表示周一,1 表示周二,...... ,6 表示周日
WEEK(date): 用于计算 date 是一年中的第几周,一年有 53 周
WEEKOFYEAR(date) :用于计算日期 date 是一年中的第几周,一年有 53 周

mysql> select DAYNAME('2020-4-24'),DAYOFWEEK('2020-4-24'),WEEKDAY('2020-4-24'),WEEK('2020-4-24'),WEEKOFYEAR('2020-4-24');

MySQL数据库函数(二)
10、获取天数的函数


DAYOFYEAR(date) :用于返回 date 是一年中的 第几天,一年有 365 天
DAYOFMONTH(date): 用于计算 date 是一个月中的第几天

mysql> select DAYOFYEAR('2020-4-24'),DAYOFMONTH('2020-4-24');

MySQL数据库函数(二)_第9张图片
11、获取年份的函数

YEAR(date) :返回 date 对应的年份

mysql> select YEAR('20-04-24'),YEAR('98-04-24');

MySQL数据库函数(二)_第10张图片
12、获取季度的函数

QUARTER(date) :返回 date 对应的一年中的季度值

mysql> select QUARTER('20-04-24');

MySQL数据库函数(二)_第11张图片
13、获取分钟的函数

MINUTE(time) 返回 time 对应的分钟值

mysql> select MINUTE('20-04-24 10:18:00');

MySQL数据库函数(二)_第12张图片
14、获取秒钟的函数

SECOND(time) 返回 time 对应的秒数

mysql> select SECOND('10:18:22');

MySQL数据库函数(二)_第13张图片
15、获取日期的指定值的函数

EXTRACT(type FROM date) 用于获取指定的日期值

mysql> select EXTRACT(YEAR FROM '2020-04-24') AS col1,                    #  当type为YEAR 时,只返回年值 
    -> EXTRACT(YEAR_MONTH FROM '2020-04-24 10:18:22')  AS col2,          # 当type为 YEAR_MONTH时,返回年与月 
    -> EXTRACT(DAY_MINUTE FROM '2020-04-24 10:18:22')  AS col3;                   # 当type为 DAY_MINUTE时,返回日、小时、分钟 

MySQL数据库函数(二)_第14张图片
16、时间和秒钟转换的函数

TIME_TO_SEC(time) :用于将 time 转换 为秒钟,公式为 " 小时3600 + 分钟60 + 秒 "
SEC_TO_TIME(time): 用于将秒值转换为时间格式

mysql> select TIME_TO_SEC('23:23:00'),SEC_TO_TIME('84180'); 

MySQL数据库函数(二)_第15张图片
17、计算日期和时间的函数

DATE_ADD() :用于对日期进行加运算,格式为 DATE_ADD(date, INTERVAL expr type)
DATE_SUB(): 用于对日期进行减运算,格式为 DATE_SUB(date, INTERVAL expr type)
SUBDATE(): 用于对日期进行减运算,格式为 SUBDATE(date, INTERVAL expr type)
ADDTIME() :用于对日期进行加运算,格式为 ADDTIME(date, expr)
SUBTIME() :用于对日期进行减运算,格式为 SUBTIME(date, expr)
DATE_DIFF() :用于计算两个日期之间的间隔天数

mysql> select DATE_ADD('2020-12-31 23:59:59', INTERVAL 1 SECOND); # 对指定的日期 增加1秒

MySQL数据库函数(二)_第16张图片
mysql> select DATE_ADD('2020-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND);
MySQL数据库函数(二)_第17张图片
mysql> select DATE_SUB('2020-01-01', INTERVAL 31 DAY); # 给指定的日期减去31天
MySQL数据库函数(二)_第18张图片
mysql> select SUBDATE('2020-01-01', INTERVAL 31 DAY);
MySQL数据库函数(二)_第19张图片
mysql> select ADDTIME('2020-12-31 23:59:59', '1:1:1'); # 给指定的日期增加1时1分1 秒
MySQL数据库函数(二)_第20张图片
mysql> select SUBTIME('2020-12-31 23:59:59', '1:1:1'); # 给指定的日期减去1时1分1 秒
MySQL数据库函数(二)_第21张图片
mysql> select DATEDIFF('2020-06-01', '2020-04-24');
MySQL数据库函数(二)_第22张图片
18、将日期和时间格式化的函数

DATE_FORMAT(date, format) 用于格式化日期,即根据 format 指定的格式 显示 date 值
TIME_FORMAT(time, format) 用于格式化时间,即根据 format 指定的格式显示 time 值
GET_FORMAT() ,我们指定值类型和格式化类型,然后会显示成格式字符串

mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); 

MySQL数据库函数(二)_第23张图片
mysql> select TIME_FORMAT('16:00:00', '%H %k %I');
MySQL数据库函数(二)_第24张图片
mysql> select DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA'));
MySQL数据库函数(二)_第25张图片

%d该月日期,数字形式(00..31)
%e该月日期,数字形式(0..31)
%f微秒(000000...999999)
%H以2位数表 示24小时(00..23)
%h,%I 以2位数表示12小时(01..12)
%i分钟,数字形式(00-59)
%j一年中的天数(001366)
%k以24小时(0-23)
%l以12小时(0..12)
%M月份名称(january..December)
%m月份数字形式 (00..12)
%p上午(AM)或下午(PM)
%r时间,12小时制(小时hh:分钟mm:秒钟ss后面加AM或PM)
%S,%s以2位数形式表示秒(00..59)
%T时间,24小时制(小时hh:分钟mm:秒数ss)
%U周(00..53),其 中周日为每周的第一天
%u周(00..53),其中周一为每周的第一天
%V周(01..53),其中周日为每周的第一 天,和%X一起使用
%v周(01..53),其中周一为每周的第一天,和%x一起使用
%W工作日名称(周日..周六)
%w一周中的每日(0=周日..6=周六)
%X该周的年份,其中周日为每周的第一天;数字形式4位数,和%V同时 使用
%x该周的年份,其中周一为每周的第一天;数字形式4位数,和%v同时使用
%Y4位数形式表示年份
%y2 位数形式表示年份
%% “%”文字字符

二、条件判断函数

IF() IF(expr, v1, v2) 如果表达式 expr 为 TRUE ,则返回值为 v1 ,否则返回 v2

mysql> select IF(1>2,2,3);

MySQL数据库函数(二)_第26张图片
可以看到一并不大于二所以返回v2,也就是3

IFNULL() IFNULL(v1, v2) ,如果 v1 不为 NULL ,则返回值为 v1 ;如果 v1 为 NULL ,则返回值为 v2

mysql> select IFNULL(1,2),IFNULL(NULL,10);

MySQL数据库函数(二)_第27张图片

CASE 语法:CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END 含义:如果 expr 等于某个 vn ,则返回对应位置 THEN 后面的结果,如果与所有值都不相等,则返回 ELSE 后面的 rn

mysql> select CASE 2 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END; 

MySQL数据库函数(二)_第28张图片

三、系统信息函数

1、获取 MySQL 版本号的函数

VERSION() 用于获取 MySQL 版本号

mysql> select  VERSION(); 

MySQL数据库函数(二)_第29张图片
2、查看当前用户的连接数的ID函数

CONNECTION_ID() 用于查看当前用户的连接数

mysql> select CONNECTION_ID(); 

MySQL数据库函数(二)_第30张图片
mysql> show PROCESSLIST; # 查看当前用户的连接信息
MySQL数据库函数(二)_第31张图片

**上图标签含义如下:**

Id :用户登录 MySQL 时,系统分配的连接 id
User :当前连接的用户
Host :显示这个语句是从哪个 IP 的哪个端口上发出的,可以用来追踪出现问题语句的用户
db :显示这个进程目前连接的是哪个数据库
Command :显示当前连接执行的命令,一般取值为休眠(Sleep)、查询(Query)、连接(Connect)
Time :显示这个状态持续的时间,单位是秒
State :显示使用当前连接的 SQL 语句的状态
Info :显示这个 SQL 语句

3、查看当前使用的数据库的函数

DATABASE() :用于查看当前使用的数据库
SCHEMA(): 用于查看当前使用的数据库

mysql> select database(),SCHEMA(); 

MySQL数据库函数(二)_第32张图片
4、查看当前登录的用户名的函数

USER() :返回当前登录的用户 及主机名
CURRENT_USER(): 用于返回当前登录的用户及主机名
SYSTEM_USER() :用于返回当前登录的用户及主机名

mysql> select  USER(),CURRENT_USER(),SYSTEM_USER(); 

MySQL数据库函数(二)_第33张图片
5、查看指定字符串的字符集的函数

CHARSET(str) 用于查看字符串 str 的字符集

mysql> select CHARSET('abc'); 

MySQL数据库函数(二)_第34张图片
6、查看指定字符串的排列方式的函数


COLLATION(str): 用于查看字符串 str 的字符排列方式

mysql> select COLLATION('abc'); 

MySQL数据库函数(二)_第35张图片
7、获取后一个自动生成的 ID 值得函数

LAST_INSERT_ID() :用于获取后一个自动生成的 ID 值

#先创建一个表,其id字段带有 AUTO_INCREMENT约束 
mysql> create table tab1(
    -> id int auto_increment primary key,
    -> name varchar(30)
    -> );

mysql> insert into tab1 values (NULL,'zhangsan');       #插入一条数据,这时id没有指定, 则自动生成,id为1

mysql> insert into tab1 values (NULL,'lisi');           # 插入一条数据,这时id没有指定, 则自动生成,id为2 
mysql> select * from tab1;             # 查看表的信息       
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+
mysql> select LAST_INSERT_ID();

MySQL数据库函数(二)_第36张图片

mysql> insert into tab1 values (NULL,'aaa'),(NULL,'bbb'),(NULL,'ccc');
mysql> select * from tab1;           # 如果我们一次性插入多条数据,虽然 id到了5 
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | aaa      |
|  4 | bbb      |
|  5 | ccc      |
+----+----------+
mysql> select LAST_INSERT_ID();               # 但我们用LAST_INSERT_ID()查看时 却为3 ,这是因为LAST_INSERT_ID()只返回插入的 第一行数据时产生值 
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+

四、加/解密函数
1、加密函数

PASSWORD(str) :从明文密码 str 计算并返 回加密后的密码字符串,当参数为 NULL 时,返回 NULL
MD5(str) 为字符串 str 算出一个 MD5 128 比特校验和
ENCODE(str, pswd_str) 使用 pswd_str 作为密码,加密 str

mysql> select PASSWORD('newpwd');

MySQL数据库函数(二)_第37张图片
mysql> select MD5('newpwd');
MySQL数据库函数(二)_第38张图片
mysql> select ENCODE('secret','123.com');
MySQL数据库函数(二)_第39张图片
2、解密函数

DECODE(crypt_str, pswd_str) 使用 pswd_str 作为密码,解密加密字 符串 crypt_str

mysql> select DECODE(ENCODE('secret','cry'),'cry');

MySQL数据库函数(二)_第40张图片

三、其他函数

1、格式化函数

FORMAT(x, n) :将数字 x 格式化,并以四舍五入的方式保留小数点后 n 位,结果 以字符串的形式返回

mysql> select FORMAT(1.23456, 4), FORMAT(1.2, 4), FORMAT(1.234, 0); 

MySQL数据库函数(二)_第41张图片

2、不同进制的数字进行转换的函数

CONV() :用于不同进制数之间的转换

mysql> select CONV('a',16,2),              # 将16进制的a转换为2进制 
    -> CONV(15,10,2),                   # 将10进制的15转换为2进制 
    -> CONV(15,10,8),          # 将10进制的15转换为8进制 
    -> CONV(15,10,16);               # 将10进制的15转换为16进制 

MySQL数据库函数(二)_第42张图片
3、 IP 地址与数字互相转换的函数

INET_ATON(expr) :用于将网络地址转 换为一个代表该地址数值的整数

 mysql> select INET_ATON('192.168.1.1');

MySQL数据库函数(二)_第43张图片
4、加锁函数和解锁函数

GET_LOCK(str, timeout) :使用字符串 str 来得到一个锁,持续时间 timeout 秒

* 若成功得到锁,则返回 1
* 若操作超时,则返回 0
* 若发生错误,则返回 NULL
mysql> select GET_LOCK('lock1',10);            # 返回结果为1,说明成功得到了一个名称为'lock1'的锁,持续时间为 10秒 

MySQL数据库函数(二)_第44张图片

RELEASE_LOCAK(str) :用于解开被 GET_LOCK() 获取的,用字符串 str 所命名的锁

* 若锁被解开,则返回 1
* 若该线程尚未创建锁,则返回 0
* 若命名的锁不存在,则返回 NULL
* 若该锁从未被 GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在
mysql> select RELEASE_LOCK('lock1');          # 返回值为1说明解锁成功 

MySQL数据库函数(二)_第45张图片

IS_FREE_LOCK(str): 检查名为 str 的锁是否可以使用

* 若锁可以使用,则返回 1
* 若锁正在被使用,则返回 0
* 若出现错误,则返回 NULL
mysql> select IS_FREE_LOCK('lock1');

MySQL数据库函数(二)_第46张图片

IS_USED_LOCK(str) :用于检查名为 str 的锁是否正在被使用,若被封锁,则返回使用该锁的客户端的连接标识 符,否则返回 NULL

mysql> select IS_USED_LOCK('lock1');

MySQL数据库函数(二)_第47张图片
5、重复执行指定操作的函数

BENCHMARK(count, expr): 用于重复 count 次执行表 达式 expr

* 可以用于计算 MySQL 处理表达式的速度
* 可以在 MySQL 客户端内部报告语句执行的时间
mysql> select PASSWORD('newpwd');         # # 执行1次加密操作花费了0.00秒 

MySQL数据库函数(二)_第48张图片

mysql> select BENCHMARK( 500000, PASSWORD('newpwd') ); 
+-----------------------------------------+
| BENCHMARK( 500000, PASSWORD('newpwd') ) |
+-----------------------------------------+
|                                       0 |
+-----------------------------------------+
1 row in set, 1 warning (0.06 sec)                # 执行500000次加密操作花费了0.06秒 

6、改变字符集的函数

CONVERT(... USING ...) 用于改变字符串的默认字符集

mysql> select CHARSET('abc');               # 默认是utf8
+----------------+
| CHARSET('abc') |
+----------------+
| utf8           |
+----------------+
mysql> select CHARSET(CONVERT('abc' USING latin1));                  #  转换成latin1字符集
+--------------------------------------+
| CHARSET(CONVERT('abc' USING latin1)) |
+--------------------------------------+
| latin1                               |
+--------------------------------------+

7、改变数据类型的函数

CAST(x, AS type) :用于将一个数据类型的值转换 为另一个数据类型的值
CONVERT(x, type) :用于将一个数据类型的值转换为另一个数据类型的值

mysql> select CAST(100 AS CHAR(2));       # 将整数类型100转换为带有两个显示宽度的字符串类 型,结果为'10' 

MySQL数据库函数(二)_第49张图片
mysql> select CONVERT(100,CHAR(2)); # 将整数类型的100转换为带有两个显示宽度的字符 串类型,结果为'10'
MySQL数据库函数(二)_第50张图片