MySQL中常用函数之日期函数使用详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL中常用函数之日期函数使用详解

该篇总结MySQL 中常用的日期时间函数。

【1】DATE_FORMAT (datetime ,FormatCodes )

将日期转换成字符,示例如下:

SELECT DATE_FORMAT(SYSDATE(),'%W'),
DATE_FORMAT(SYSDATE(),'%w'),
DATE_FORMAT(SYSDATE(),'%Y-%m-%d');

bb7b16056febc0df25dd77636b5e80a5.png

date_format格式参考MySQLdateFormat格式


【2】EXTRACT(unit FROM date):提取日期的指定部分

语法格式如下:

SELECT EXTRACT(unit FROM date)

示例如下:

SELECT 
EXTRACT(second FROM SYSDATE()),
EXTRACT(minute FROM SYSDATE()),
EXTRACT(hour FROM SYSDATE()),
EXTRACT(day FROM SYSDATE()),
EXTRACT(week FROM SYSDATE()),
EXTRACT(month FROM SYSDATE()),
EXTRACT(year FROM SYSDATE())

fe155f8a6c0ca8e622c62c50e2a25877.png


【3】DAY

语法格式如下:

DAY(date) //返回日期的天;DAY() 和DAYOFMONTH()的意义相同。
DAYNAME (date) //英文星期
DAYOFWEEK (date) //一周中的第几天,1为星期日,范围1-7
DAYOFMONTH(date)//一月中的第几天,一号为第一天,范围1-31
DAYOFYEAR (date) //一年中的第几天,范围1-366

示例如下:

SELECT 
DAY(SYSDATE()),
DAYNAME(SYSDATE()),
DAYOFWEEK(SYSDATE()),
DAYOFMONTH(SYSDATE()),
DAYOFYEAR(SYSDATE());

40380bb19a1358a7ff405445a7d24599.png


【4】week

语法格式如下:

WEEK(date[,mode])

该函数返回date 对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 到53 或从1 到53。若 mode参数被省略,则使用default_week_format系统自变量的值(不改变默认为0)。

以下为mode的说明:

WEEKDAY(date)
//返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引 
WEEKOFYEAR(date)
//将该日期的阳历周以数字形式返回,范围是从1到53。
//它是一个兼容度函数,相当于WEEK(date,3)。

【5】year

语法格式如下:

YEAR(date)

返回date 对应的年份,范围是从1000到9999。

YEARWEEK(date), YEARWEEK(date,start)

返回一个日期对应的年或周。start参数的工作同 start参数对 WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。


注意,周数和WEEK()函数都可选参数0或 1。可能会返回的week有所不同,原因是此时 WEEK() 返回给定年份的语境中的周。


【6】CURRENT_X

语法格式如下:

CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
NOW ( ) //当前时间

示例如下:

SELECT 
CURRENT_DATE(),
CURRENT_TIME(),
CURRENT_TIMESTAMP(),
NOW();

b65e1ea81eed17aee5bd05fab184e1d7.png

【7】日期加减

① 求差:date1-date2(只算日期,不算时间)

DATEDIFF (date1 ,date2 ) //两个日期差

示例如下 :

SELECT DATEDIFF(SYSDATE(),'2017-08-04') ;

86fbda267a7aaba96ecdc2ccb6d682a1.png

TIMEDIFF(datetime1,datetime2) : 两个日期时间型相减:

SELECT TIMEDIFF(SYSDATE(),'2017-08-07 20:20:20'),TIMEDIFF('2017-08-07 20:20:20',SYSDAT


0ba2ecaafe3d958ed71bfe326b1265d0.png


② DATE_ADD(date2 , INTERVAL d_value d_type )

在date2中加上日期或时间

SELECT DATE_ADD(SYSDATE(),INTERVAL 3 HOUR)
type:可为second,minute,hour,day,week,month and year;

同ADDDATE(date,INTERVAL expr type)。


③ DATE_SUB (date2 , INTERVAL d_value d_type )

在date2上减去一个时间

SELECT DATE_SUB(SYSDATE(),INTERVAL 3 hour);
其他同②。

同SUBDATE(date,INTERVAL expr type)。


【8】根据日期判断秒,分,时,天,周,月,年

语法格式如下:

SECOND(datetime)//返回datetime的秒;
MINUTE(datetime)//返回datetime的分钟;
HOUR(datetime )//返回datetime的小时;
DAY (date) //返回日期的天;
WEEK (datetime [,start_of_week ]) //第几周
MONTH(datetime)//月份
YEAR(datetime)//年份
DATE (datetime ) //返回datetime的日期部分;

示例如下 :

SELECT 
SECOND(SYSDATE()), 
MINUTE(SYSDATE()),
HOUR(SYSDATE()),
DAY(SYSDATE()),
WEEK(SYSDATE()),
MONTH(SYSDATE()),
YEAR(SYSDATE())
DATE(SYSDATE());

381fe08a2c067d44536ecf587d4bba69.png


【9】时间相加减

① 时间相加

将time_interval加到date2

ADDTIME (date2 ,time_interval )

示例如下 :

SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');


9eae8d133cd792fa142eae840a801193.png

② 时间相减

SELECT SUBTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');

73964f9fd0994e4e18cf80ed9045e422.png


【10】秒数,时间转换

① 秒数转时间

SEC_TO_TIME (seconds )


86460a4e1a0c6f2625c5977c806ad72f.png


② 时间转秒数

TIME_TO_SEC(time)


ec5212eade68b18c840405b5274cd930.png

【11】datetime的微秒部分

MICROSECOND(datetime) //微秒


4cb12d93dbe26ce6b5e0a8b37c8b0904.png

【12】datetime的月的最后日期

即,隶属的月的最后一天是几号。

LAST_DAY(date) //date的月的最后日期


9c6f948efc1185eb3469231c4f531b0d.png


【13】month

语法格式如下:

MONTH(date)
//返回date 对应的月份,范围时从 1 到 12。
MONTHNAME(date)
//返回date 对应月份的全名。


0032243b2d8e8a56d7ffce5a603b39d3.png


【14】日期时间串拼接

语法格式如下:

MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串

示例如下 :

SELECT MAKEDATE(2017,1),MAKETIME (20,20 ,20);

5f3e26be06c7ad1e028faab4ef4e9735.png

【15】JavaScript中中的Date对象

用法如下所示:

var myDate=new Date();
myDate.getYear(); //获取当前年份(2位)
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
myDate.getDate(); //获取当前日(1-31)
myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours(); //获取当前小时数(0-23)
myDate.getMinutes(); //获取当前分钟数(0-59)
myDate.getSeconds(); //获取当前秒数(0-59)
myDate.getMilliseconds(); //获取当前毫秒数(0-999)
myDate.toLocaleDateString(); //获取当前日期
var mytime=myDate.toLocaleTimeString(); //获取当前时间
myDate.toLocaleString( ); //获取日期与时间


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
16 2
mysql中find_in_set()函数用法详解及增强函数
|
15天前
|
关系型数据库 MySQL
mysql使用 CONCAT(字段,字段) 函数拼接
mysql使用 CONCAT(字段,字段) 函数拼接
|
1月前
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南
|
1月前
|
关系型数据库 MySQL 开发者
Mysql COUNT() 函数详解
【6月更文挑战第19天】Mysql COUNT() 函数详解,包括 COUNT() 的用法及 COUNT() 带条件查询的操作
|
1月前
|
SQL 关系型数据库 MySQL
mysql中GROUP_CONCAT函数详解
mysql中GROUP_CONCAT函数详解
20 0
|
1月前
|
关系型数据库 MySQL 数据库
mysql之日期时间函数
SELECT SECOND('12:45:31'); -- 结果: 31 请注意,以上结果取决于实际查询执行的时间和日期。在实际的数据库操作中,通常会使用列名作为参数,而不是直接使用硬编码的日期或时间值。例如: SELECT YEAR(birthdate) FROM employees; 这将返回 employees 表中每位员工的 birthdate 列的年份。日期和时间函数在处理数据时非常有用,特别是当你需要对日期和时间进行操作或计算时。 ————————————————
22 0
|
1月前
|
存储 SQL 关系型数据库
MySQL快速回顾:计算字段与函数
MySQL快速回顾:计算字段与函数
|
21天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
19天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
18天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
994 7
Mysql 数据库主从复制