07_MySQL的单行函数(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 07_MySQL的单行函数(二)

4. 日期和时间函数


4.1 获取日期、时间


3354c5be65c7feca246df25967d45ff4_977c279e92804d3aa123af7aae349a3c.png


#日期、时间函数
SELECT
CURDATE(),CURTIME(),NOW(),SYSDATE()+0,UTC_DATE(),UTC_DATE()+0,UTC_TIME(),UTC_TIME()+0
FROM DUAL;


70b284c5f83db31740960c9a93b6663f_b153c13951e745bf8ed9a35cf00bbe14.png


4.2 日期与时间戳的转换


adf9818faf39d7ca9505c59545f46e0d_39d5a0f17e2444aeb04a43b2831cb50c.png


何为时间戳?


时间戳就是从1970年1月1日0时0分0秒到当前时间点的所有秒数。

1970.1.1 0:0:0 这个时间就是IT中所谓的“时间纪元”,相信大家在很多文章中都见过它。

比如oracle的时间显示,unix和linux系统的时间运算等,那为什么选择1970,而不选择1900呢。接下来让我们阐述它的由来。


#代码测试
#日期与时间戳的转换
SELECT UNIX_TIMESTAMP(NOW()),UNIX_TIMESTAMP(CURDATE()),UNIX_TIMESTAMP(CURTIME()),FROM_UNIXTIME(1677118000)
FROM DUAL;


70aed53c0572a31a59bf2db5c0729994_ba07e8fc9e4e4d10a1e489f20311fd94.png


4.3 获取月份、星期、星期数、天数等函数


4efbd8b5ea040be85a638835fd1adc94_19a2e24c839941069c226cb16731b1d8.png


SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE())
FROM DUAL;


c349c4932d09e803eaaf41fd8e229be7_dc546fcee2cd431686dbd064ff78fdcb.png


4.4 日期的操作函数


EXTRACT(type FROM date)函数中type的取值与含义:


55ca6a56416d6c306024e4285dc0d01b_dd4ec956076446838dcfce56773ca5d4.png


SELECT EXTRACT(MINUTE FROM NOW()),EXTRACT( WEEK FROM NOW()),
EXTRACT( QUARTER FROM NOW()),EXTRACT( MINUTE_SECOND FROM NOW())
FROM DUAL;


15b17bc7e6fded3f7eb41f2a63c0dacb_da3e90e3006041e482ea84a27633fd8f.png


4.5 时间和秒钟转换的函数


d55ecc1cbbe802ac83bbafa9ce80059d_deb037a5af894abea44eae1b60e840d4.png


SELECT TIME_TO_SEC(NOW()), SEC_TO_TIME(61000)

FROM DUAL;


36ce4b7c523272d9a37ff137244c6409_7ec54e44a6c24c5b9f71adb8f45efa08.png


4.6 计算日期和时间的函数


3080d0b8ced0d4a3919fa7163d3b15d0_4c7a0d7b51db489190d0f74239ca2408.png


上述函数中type的取值:


a335a09a2ef3d1b688e637166b85836f_0e66382760c54b2ebcc935b18f4327fc.png


SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1,DATE_ADD('2021-10-21 23:32:12',INTERVAL1 SECOND) AS col2,
ADDDATE('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col3,
DATE_ADD('2021-10-21 23:32:12',INTERVAL '1_1' MINUTE_SECOND) AS col4,
DATE_ADD(NOW(), INTERVAL -1 YEAR) AS col5, #可以是负数
DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) AS col6 #需要单引号
FROM DUAL;


cb957c00eb68828d3173d227a0b9a949_fc192f2876e7458ab43193f5542a7cce.png


23c4d501748336f671e83fda8a342110_2a2989c2fb62469fbd56a32d36d258ca.png


SELECT
ADDTIME(NOW(),20),SUBTIME(NOW(),30),SUBTIME(NOW(),'1:1:3'),DATEDIFF(NOW(),'2021-10-01'),
TIMEDIFF(NOW(),'2021-10-25 22:10:10'),FROM_DAYS(366),TO_DAYS('0000-12-25'),
LAST_DAY(NOW()),MAKEDATE(YEAR(NOW()),12),MAKETIME(10,21,23),PERIOD_ADD(20200101010101,10)
FROM DUAL;


4.7 日期的格式化与解析


8757197a784098ccd7552d2aa66bfebe_c78475b5c279433ead03705d28d7544d.png


上述函数中fmt参数常用的格式符:


4e65bdd370f9794b89e080810c098137_1d3718e4de554dde9a1bb706e8f3f2d7.png


GET_FORMAT函数中date_type和format_type参数取值如下:


50f1cd86ce04fe17338f3c6fefe503f2_c46cf520526645a78a755cb2f24eb6ce.png


SELECT DATE_FORMAT(NOW(), '%H:%i:%s'),STR_TO_DATE('09/01/2009','%m/%d/%Y'),STR_TO_DATE('20140422154706','%Y%m%d%H%i%s'),
STR_TO_DATE('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s'),GET_FORMAT(DATE, 'USA'),DATE_FORMAT(NOW(),GET_FORMAT(DATE,'USA')),
STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d') FROM DUAL;


98874d8ad54dbf93fda48bf97d5d7a7b_e220ff81b2ea40ad8e29fe56abcaf547.png


12f0a31ad5ad3b4af96765d2c70741b2_c69825be63f24d04b05a52ec13dcb864.png


5. 流程控制函数


流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。

MySQL中的流程处理函数主要包括 IF()、IFNULL()和CASE()函数。


2cf61a154fca7ab4e9cb0be875c2d795_2b6906ffa47e40cd90ac334da42e8920.png


#4.4 CASE ... WHEN ... THEN ... WHEN ... THE ... ELSE ... END


/*
练习1:查询部门号为 10,20, 30 的员工信息, 
若部门号为 10, 则打印其工资的 1.1 倍, 
20 号部门, 则打印其工资的 1.2 倍, 
30 号部门打印其工资的 1.3 倍数。
其他部门,打印其工资的1.4倍数
*/
#实现方式一:
SELECT employee_id,last_name,department_id,salary,CASE department_id WHEN 10 THEN salary *1.1
     WHEN 20 THEN salary *1.2
     WHEN 30 THEN salary *1.3
     ELSE salary * 1.4 END "detalis"
FROM employees;
#实现方式二:
SELECT employee_id,last_name,department_id,salary,CASE WHEN department_id = 10 THEN salary * 1.1
       WHEN department_id = 20 THEN salary * 1.2
       WHEN department_id = 30 THEN salary * 1.3
       ELSE salary * 1.4 END "detalis"
FROM employees;


cd6c3d09021a37d772e87f2734f16e87_6fafa324ce2f465c859a7e265467259f.png


6. 加密与解密函数


加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在

保证数据库安全时非常有用。


0243031d4e7cfadb34432458b5f92588_d6b02d778be74d9ea0a0fd7087695ffb.png


SELECT MD5('mysql'),SHA('mysql'),MD5(MD5('mysql'))
FROM DUAL;


f31f500dbe3e4c7778b553eb7b0da174_95387672cc704f3b8b89daf306eae47e.png


# ENCODE() \ DECODE() PASSWORD()在mysql1  8.0 中弃用
SELECT ENCODE('atguigu','mysql'),DECODE(ENCODE('atguigu','mysql'),'mysql')
FROM DUAL;


f31f500dbe3e4c7778b553eb7b0da174_95387672cc704f3b8b89daf306eae47e.png


7. MySQL信息函数


MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库 进行维护工作。


0ba3b3a748c60786a2577b721a54e3ac_09e1422ceea8410784990572b80dfbf5.png


SELECT USER(), CURRENT_USER(), SYSTEM_USER(),SESSION_USER(),CHARSET('ABC'),COLLATION('ABC')
FROM DUAL;


8. 其他函数


94813e70a4fabeee868c1225353f2cf5_dec8d47284834f228e458a78820fa9fa.png


MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的 开发和运维过程中也是不容忽视的。


SELECT INET_ATON('192.168.1.100'),CHARSET('mysql'), CHARSET(CONVERT('mysql' USING 'utf8'))
FROM DUAL;


c60d27858af9ee3c7ac49ae823636e05_7bc574b40232487187451605bdd41da9.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路 | 基础篇】MySQL函数之单行函数
【MySQL进阶之路 | 基础篇】MySQL函数之单行函数
|
关系型数据库 MySQL
[MySQL]单行函数(二)
[MySQL]单行函数(二)
|
SQL 运维 安全
MySQL数据库,从入门到精通:第七篇——MySQL单行函数应用(二)
MySQL数据库,从入门到精通:第七篇——MySQL单行函数应用
104 0
|
6月前
|
SQL 关系型数据库 MySQL
|
Oracle 关系型数据库 MySQL
对比mysql学习oracle函数(四):oracle单行函数—转换函数
对比mysql学习oracle函数(四):oracle单行函数—转换函数
对比mysql学习oracle函数(四):oracle单行函数—转换函数
|
SQL 运维 安全
[MySQL]单行函数(五)
[MySQL]单行函数(五)
|
关系型数据库 MySQL
[MySQL]单行函数(四)
[MySQL]单行函数(四)
|
Unix 关系型数据库 MySQL
[MySQL]单行函数(三)
[MySQL]单行函数(三)
|
SQL 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
MySQL数据库,从入门到精通:第七篇——MySQL单行函数应用(一)
MySQL数据库,从入门到精通:第七篇——MySQL单行函数应用
166 0