mysql数据库季度函数_数据库之MySQL函数(二)

本文详细介绍了MySQL中各种日期和时间函数的使用,包括获取当前日期、时间、日期时间戳、转换时间戳、获取月份、星期、年份、季度、分钟、秒钟等,并演示了如何进行日期和时间的加减、格式化以及条件判断等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、日期和时间函数

1、获取当前日期的函数

都一样,用法不同

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

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

mysql> select CURDATE(),CURRENT_DATE();

d6bb828354fa187e640851ba03857dcf.png

2、获取当前时间的函数

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

mysql> select CURTIME();

e4394782dd0e2efd607b036dcfbedb01.png

3、获取当前日期和时间的函数

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

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

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

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

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

b49d4d388c5fbe3f20cb37d3cdb4ae6d.png

4、获取时间戳的函数

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

mysql> select UNIX_TIMESTAMP();

5b716992fc8b8bae9ac09f2352d002a5.png

时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

5、转换时间戳的函数

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

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

ff70f66ed0b97d295dbd18433abd4732.png

6、获取 UTC 日期的函数

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

mysql> select UTC_DATE();

65b7984520992f75bf8534c560c1935f.png

7、获取 UTC 时间的函数

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

mysql> select UTC_TIME();

bdbbc49e67d8c5ebb0f5defb6df0b0f3.png

8、获取月份的函数

MONTH(date) :用于返回 date 对应的月份

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

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

d937cf3ad6b79296c4fb9ee6e67acde3.png

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');

3a5933f4438f77670cc77463db6bc0a3.png

10、获取天数的函数

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

DAYOFMONTH(date): 用于计算 date 是一个月中的第几天

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

e6af10c2c08f8f51191231d0fa228b9c.png

11、获取年份的函数

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

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

e50ddab9f5c823c724df2687a25a5f7c.png

12、获取季度的函数

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

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

9f14fc56d9035a30ac38d36d78e1eb0f.png

13、获取分钟的函数

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

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

0e996354eb6a6fd56e5a313dd14f8404.png

14、获取秒钟的函数

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

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

3a12a912c5c5bd5f096a6790296feb5f.png

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时,返回日、小时、分钟

2e58d7c571cef2679ef3ab91c35e48be.png

16、时间和秒钟转换的函数

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

SEC_TO_TIME(time): 用于将秒值转换为时间格式

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

e0fbebf1126bef70318b156dc23e0728.png

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秒

368bc48a1fbef081f5b28ddd37f2206f.png

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

32156eddf44f9429adc03dd7aca8276e.png

mysql> select DATE_SUB('2020-01-01', INTERVAL 31 DAY); # 给指定的日期减去31天

b772a27abf2e3dbd516c3f2fd110222a.png

mysql> select SUBDATE('2020-01-01', INTERVAL 31 DAY);

10a1a7f042e4509254ad71c9250454dd.png

mysql> select ADDTIME('2020-12-31 23:59:59', '1:1:1'); # 给指定的日期增加1时1分1 秒

6d89b7a01f9fcabe25950a0c9dcb5d35.png

mysql> select SUBTIME('2020-12-31 23:59:59', '1:1:1'); # 给指定的日期减去1时1分1 秒

568053d69d2e46c3e9f051ed8bcb8fd6.png

mysql> select DATEDIFF('2020-06-01', '2020-04-24');

e8f909ce1dfec19999625ed98e01d2c4.png

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');

31b7a34635d7e24b2c92ebbda23d41ea.png

mysql> select TIME_FORMAT('16:00:00', '%H %k %I');

3de95f43158bcc61a7c6440ca117c1fb.png

mysql> select DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA'));

1b3eadc7ccef9c9d610dbdfae271d37d.png

%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);

4bf171d6329c63b7c89756dc356c33ff.png

可以看到一并不大于二所以返回v2,也就是3

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

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

9611a9e768b831315b33ff4581fdd77b.png

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;

d85122db5079082753df05bf0b800dde.png

三、系统信息函数

1、获取 MySQL 版本号的函数

VERSION() 用于获取 MySQL 版本号

mysql> select VERSION();

648a4bec38a99d96a0c7170c681446a2.png

2、查看当前用户的连接数的ID函数

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

mysql> select CONNECTION_ID();

3b0c3653f7df5cd513435d464927cfbb.png

mysql> show PROCESSLIST; # 查看当前用户的连接信息

1be26b46e47dca13cf9acb1a2cd08d74.png

上图标签含义如下:

Id :用户登录 MySQL 时,系统分配的连接 id

User :当前连接的用户

Host :显示这个语句是从哪个 IP 的哪个端口上发出的,可以用来追踪出现问题语句的用户

db :显示这个进程目前连接的是哪个数据库

Command :显示当前连接执行的命令,一般取值为休眠(Sleep)、查询(Query)、连接(Connect)

Time :显示这个状态持续的时间,单位是秒

State :显示使用当前连接的 SQL 语句的状态

Info :显示这个 SQL 语句

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

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

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

mysql> select database(),SCHEMA();

27d39c9a3e4fd168fb35f63c3191cfad.png

4、查看当前登录的用户名的函数

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

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

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

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

77a74d377d14d9487adc0817efd413cb.png

5、查看指定字符串的字符集的函数

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

mysql> select CHARSET('abc');

cf0c75d9c1133456bde17746cb3b9df3.png

6、查看指定字符串的排列方式的函数

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

mysql> select COLLATION('abc');

3430cb6aaeaa60609f8e97b6ef2f202b.png

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();

80f45a35fc9bc7eb1c1984e9358de823.png

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');

f63380036625136698bc2451c4abdb08.png

mysql> select MD5('newpwd');

11aec18555b7e144b7deeddef02b93ac.png

mysql> select ENCODE('secret','123.com');

4460219f02902e35bf64f875f9c9b72e.png

2、解密函数

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

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

17009fb5e6b69a3d779a94048d1354d4.png

五、其他函数

1、格式化函数

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

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

9c7d874cac9e6ef178ad798f9fba7739.png

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进制

322e8659ad0c4c6f5bd54c6073c3531b.png

3、 IP 地址与数字互相转换的函数

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

mysql> select INET_ATON('192.168.1.1');

d8d0ec4c50891f3f69adc7534499f91d.png

4、加锁函数和解锁函数

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

若成功得到锁,则返回 1

若操作超时,则返回 0

若发生错误,则返回 NULL

mysql> select GET_LOCK('lock1',10); # 返回结果为1,说明成功得到了一个名称为'lock1'的锁,持续时间为 10秒

a907c2b2896c7e525e751960000bcedc.png

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

若锁被解开,则返回 1

若该线程尚未创建锁,则返回 0

若命名的锁不存在,则返回 NULL

若该锁从未被 GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在

mysql> select RELEASE_LOCK('lock1'); # 返回值为1说明解锁成功

6d4fed2030f0952067698254c38a5981.png

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

若锁可以使用,则返回 1

若锁正在被使用,则返回 0

若出现错误,则返回 NULL

mysql> select IS_FREE_LOCK('lock1');

f2fb5f9d7598305ef978ec7abce71678.png

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

mysql> select IS_USED_LOCK('lock1');

b968c6f2efa9edeefa5459cbb3494e07.png

5、重复执行指定操作的函数

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

可以用于计算 MySQL 处理表达式的速度

可以在 MySQL 客户端内部报告语句执行的时间

mysql> select PASSWORD('newpwd'); # # 执行1次加密操作花费了0.00秒

f1d29ff960fb41fa780c26b9c7400d88.png

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'

2f67ddebe414810b39ad50cd0385551a.png

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

10aafb8f07e44680c1031781f8ef728c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值