当前位置: 首页 > article >正文

MySQL:日期时间函数整理

文档

  • https://www.w3schools.cn/sql/sql_ref_mysql.html
  • https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html

目录

    • 获取日期时间
    • 日期属性
    • 日期计算
    • ADDDATE
    • DATE_ADD
    • DATE_SUB
    • DATEDIFF
    • MONTH
    • MONTHNAME
    • DATE_FORMAT

获取日期时间

函数描述
NOW返回当前日期和时间
CURDATE返回当前日期
CURRENT_DATE返回当前日期
CURRENT_TIME返回当前时间
CURRENT_TIMESTAMP返回当前日期和时间
CURTIME返回当前时间
LOCALTIME返回当前日期和时间
LOCALTIMESTAMP返回当前日期和时间
SYSDATE返回当前日期和时间
FROM_DAYS从数字日期值返回日期
MAKEDATE根据年份和天数值创建并返回日期
MAKETIME根据小时、分钟和秒值创建并返回时间
SEC_TO_TIME根据指定的秒数返回一个时间值
STR_TO_DATE根据字符串和格式返回日期
TIMESTAMP根据日期或日期时间值返回一个日期时间值

日期属性

函数描述
DATE_FORMAT格式化日期
TIME_FORMAT按指定格式格式化时间
EXTRACT从给定日期提取部分
DATE从日期时间表达式中提取日期部分
TIME从给定时间/日期时间中提取时间部分
YEAR返回给定日期的年份部分
QUARTER返回给定日期值的一年中的季度
MONTH返回给定日期的月份部分
MONTHNAME返回给定日期的月份名称
DAYOFMONTH / DAY返回给定日期的月份日期
HOUR返回给定日期的小时部分
MINUTE返回时间/日期时间的分钟部分
SECOND返回时间/日期时间的秒部分
MICROSECOND返回时间/日期时间的微秒部分
TIME_TO_SEC将时间值转换为秒
DAYOFYEAR返回给定日期的一年中的哪一天
DAYOFWEEK返回给定日期的星期索引
WEEKDAY返回给定日期的星期编号
DAYNAME返回给定日期的星期名称
WEEK返回给定日期的周数
WEEKOFYEAR返回给定日期的周数
YEARWEEK返回给定日期的年和周数
TO_DAYS返回日期和日期"0000-00-00"之间的天数

日期计算

函数描述
ADDDATE将时间/日期间隔添加到日期,然后返回日期
ADDTIME将时间间隔添加到时间/日期时间,然后返回时间/日期时间
DATEDIFF返回两个日期值之间的天数
DATE_ADD将时间/日期间隔添加到日期,然后返回日期
DATE_SUB从日期中减去时间/日期间隔,然后返回日期
PERIOD_ADD将指定的月数添加到期间
PERIOD_DIFF返回两个句点之间的差
SUBDATE从日期中减去时间/日期间隔,然后返回日期
SUBTIME从日期时间中减去一个时间间隔,然后返回时间/日期时间
TIMEDIFF返回两个时间/日期时间表达式之间的差异
LAST_DAY提取给定日期当月的最后一天

ADDDATE

将时间/日期间隔添加到日期,然后返回日期

语法

ADDDATE(date, INTERVAL value addunit)
  • addunit常用值
    • YEAR
    • MONTH
    • DAY
    • HOUR
    • MINUTE
    • SECOND

示例

mysql> SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
+----------------------------------------+
| ADDDATE("2017-06-15", INTERVAL 10 DAY) |
+----------------------------------------+
| 2017-06-25                             |
+----------------------------------------+

DATE_ADD

将时间/日期间隔添加到日期,然后返回日期

语法

DATE_ADD(date, INTERVAL value addunit)
  • addunit常用值
    • YEAR
    • MONTH
    • DAY
    • HOUR
    • MINUTE
    • SECOND
SELECT DATE_ADD("2017-06-15", INTERVAL 2 DAY);
+----------------------------------------+
| DATE_ADD("2017-06-15", INTERVAL 2 DAY) |
+----------------------------------------+
| 2017-06-17                             |
+----------------------------------------+

DATE_SUB

从日期中减去时间/日期间隔,然后返回日期

语法

DATE_SUB(date, INTERVAL value interval)
  • addunit常用值
    • YEAR
    • MONTH
    • DAY
    • HOUR
    • MINUTE
    • SECOND

示例

SELECT DATE_SUB("2017-06-15", INTERVAL 2 DAY);
+----------------------------------------+
| DATE_SUB("2017-06-15", INTERVAL 2 DAY) |
+----------------------------------------+
| 2017-06-13                             |
+----------------------------------------+

DATEDIFF

返回两个日期值之间的天数

语法

DATEDIFF(date1, date2)

示例

SELECT DATEDIFF("2017-01-10", "2017-01-01");
+--------------------------------------+
| DATEDIFF("2017-01-10", "2017-01-01") |
+--------------------------------------+
|                                    9 |
+--------------------------------------+

MONTH

返回给定日期的月份部分(从 1 到 12 的数字)

语法

MONTH(date)

示例

mysql> SELECT MONTH("2017-06-15");
+---------------------+
| MONTH("2017-06-15") |
+---------------------+
|                   6 |
+---------------------+

MONTHNAME

返回给定日期的月份名称

语法

MONTHNAME(date)

示例

mysql> SELECT MONTHNAME("2017-06-15");
+-------------------------+
| MONTHNAME("2017-06-15") |
+-------------------------+
| June                    |
+-------------------------+

示例

-- 返回当前日期
mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2023-10-24 |
+------------+

-- 返回当前日期
mysql> SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2023-10-24     |
+----------------+

-- 返回当前时间
mysql> SELECT CURRENT_TIME();
+----------------+
| CURRENT_TIME() |
+----------------+
| 11:39:45       |
+----------------+

-- 返回当前时间
mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 11:40:44  |
+-----------+

-- 返回当前日期和时间
mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2023-10-24 11:40:12 |
+---------------------+

-- 返回当前日期和时间
mysql> SELECT LOCALTIME();
+---------------------+
| LOCALTIME()         |
+---------------------+
| 2023-10-24 14:09:55 |
+---------------------+

-- 返回当前日期和时间
mysql> SELECT LOCALTIMESTAMP();
+---------------------+
| LOCALTIMESTAMP()    |
+---------------------+
| 2023-10-24 14:10:22 |
+---------------------+

-- 返回当前日期和时间
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2023-10-24 14:12:47 |
+---------------------+


-- 返回当前日期和时间
mysql> SELECT SYSDATE();
+---------------------+
| SYSDATE()           |
+---------------------+
| 2023-10-24 14:17:24 |
+---------------------+
-- 提取日期部分
mysql> SELECT DATE("2017-06-15 09:34:21");
+-----------------------------+
| DATE("2017-06-15 09:34:21") |
+-----------------------------+
| 2017-06-15                  |
+-----------------------------+

-- 从时间表达式中提取时间部分
mysql> SELECT TIME("2017-08-15 19:30:10");
+-----------------------------+
| TIME("2017-08-15 19:30:10") |
+-----------------------------+
| 19:30:10                    |
+-----------------------------+

-- 返回给定日期的年份部分(从 1000 到 9999 的数字)
mysql> SELECT YEAR("2017-06-15");
+--------------------+
| YEAR("2017-06-15") |
+--------------------+
|               2017 |
+--------------------+

-- 返回给定日期的小时部分
mysql> SELECT HOUR("2017-06-20 09:34:00");
+-----------------------------+
| HOUR("2017-06-20 09:34:00") |
+-----------------------------+
|                           9 |
+-----------------------------+

-- 从给定日期提取部分
SELECT EXTRACT(MONTH FROM "2017-06-15");
+----------------------------------+
| EXTRACT(MONTH FROM "2017-06-15") |
+----------------------------------+
|                                6 |
+----------------------------------+

-- 返回给定日期的月份日期,等于 DAY() 函数
mysql> SELECT DAYOFMONTH("2017-06-15");
+--------------------------+
| DAYOFMONTH("2017-06-15") |
+--------------------------+
|                       15 |
+--------------------------+

-- 返回某个日期的工作日索引
-- 1=星期日,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五,7=星期六
mysql> SELECT DAYOFWEEK("2017-06-15");
+-------------------------+
| DAYOFWEEK("2017-06-15") |
+-------------------------+
|                       5 |
+-------------------------+

-- 返回日期的工作日编号
-- 0 = 星期一,1 = 星期二,2 = 星期三,3 = 星期四,4 = 星期五,5 = 星期六,6 = 星期日
mysql> SELECT WEEKDAY("2017-06-15");
+-----------------------+
| WEEKDAY("2017-06-15") |
+-----------------------+
|                     3 |
+-----------------------+

-- 返回给定日期的星期名称
mysql> SELECT DAYNAME("2017-06-15");
+-----------------------+
| DAYNAME("2017-06-15") |
+-----------------------+
| Thursday              |
+-----------------------+

-- 返回给定日期的一年中的哪一天(从 1 到 366 的数字)
mysql> SELECT DAYOFYEAR("2017-06-15");
+-------------------------+
| DAYOFYEAR("2017-06-15") |
+-------------------------+
|                     166 |
+-------------------------+

-- 返回时间/日期时间的微秒部分(从 0 到 999999)
mysql> SELECT MICROSECOND("2017-06-20 09:34:00.000023");
+-------------------------------------------+
| MICROSECOND("2017-06-20 09:34:00.000023") |
+-------------------------------------------+
|                                        23 |
+-------------------------------------------+

-- 返回时间/日期时间的分钟部分(从 0 到 59)
mysql> SELECT MINUTE("2017-06-20 09:34:00");
+-------------------------------+
| MINUTE("2017-06-20 09:34:00") |
+-------------------------------+
|                            34 |
+-------------------------------+

-- 提取给定日期该月的最后一天
mysql> SELECT LAST_DAY("2017-06-20");
+------------------------+
| LAST_DAY("2017-06-20") |
+------------------------+
| 2017-06-30             |
+------------------------+

-- 返回给定日期值(从 1 到 4 的数字)的一年中的季度
mysql> SELECT QUARTER("2017-06-15");
+-----------------------+
| QUARTER("2017-06-15") |
+-----------------------+
|                     2 |
+-----------------------+

-- 返回时间/日期时间的秒部分(从 0 到 59)
mysql> SELECT SECOND("23:59:59");
+--------------------+
| SECOND("23:59:59") |
+--------------------+
|                 59 |
+--------------------+

DATE_FORMAT

按指定格式化日期

语法

DATE_FORMAT(date, format)
格式描述
%a工作日的缩写名称(周日至周六)
%b缩写月份名称(1 月至 12 月)
%c数字月份名称(0 到 12)
%D以数字形式表示的月份中的日期,后跟后缀 (1st, 2nd, 3rd, …)
%d以数值表示的月份中的日期(01 到 31)
%e以数字形式表示的月份中的日期(0 到 31)
%f微秒(000000 到 999999)
%H小时(00 到 23)
%h小时(00 到 12)
%I小时(00 到 12)
%i分钟(00 到 59)
%j一年中的某一天(001 到 366)
%k小时(0 到 23)
%l小时(1 到 12)
%M完整的月份名称(1 月至 12 月)
%m数字形式的月份名称(00 到 12)
%p上午或下午
%r12 小时 AM 或 PM 格式的时间 (hh:mm:ss AM/PM)
%S秒(00 到 59)
%s秒(00 到 59)
%T24 小时制时间 (hh:mm:ss)
%U星期天是一周的第一天(00 到 53)
%u星期一是一周的第一天的星期(00 到 53)
%V星期天是一周的第一天(01 到 53)。与 %X 一起使用
%v星期一是一周的第一天的星期(01 到 53)。与 %X 一起使用
%W完整的工作日名称(周日至周六)
%w星期天=0,星期六=6
%X星期天是一周的第一天的星期。与 %V 一起使用
%x星期一是一周的第一天的一周的年份。与 %V 一起使用
%Y4 位数字形式的年份
%y2 位数字形式的年份

示例

mysql> SELECT DATE_FORMAT("2017-06-01 09:01:02", "%Y-%m-%d %H:%i:%s");
+---------------------------------------------------------+
| DATE_FORMAT("2017-06-01 09:01:02", "%Y-%m-%d %H:%i:%s") |
+---------------------------------------------------------+
| 2017-06-01 09:01:02                                     |
+---------------------------------------------------------+

http://www.kler.cn/a/104185.html

相关文章:

  • 探索流视频的发送
  • 使用Spring Boot限制在一分钟内某个IP只能访问10次
  • Go源码实现使用多线程并发下载大文件的功能
  • 代码随想录打卡第五十天|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
  • CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
  • SAD notes
  • Matlab绘制散点的95%置信区间图
  • 会声会影2024 无损激活解锁完整旗舰版大师套装
  • javaEE -9(7000字详解TCP/IP协议)
  • go创建完美的枚举类型
  • 保存 uboot图像配置
  • 依靠继承与聚合,实现maven搭建分布式项目
  • 视频常见问题(四):视频花屏和绿屏
  • PCIe架构的处理器系统介绍
  • Redis快速上手篇(四)(Spring Cache,缓存配置)(注解方式)
  • Android Kotlin 协程初探 | 京东物流技术团队
  • 父子项目打包发布至私仓库
  • 计算机视觉与深度学习 | 非线性优化理论:图优化、高斯牛顿法和列文伯格-马夸尔特算法
  • k8s中kubectl陈述式资源管理
  • (九)QVTKOpenGLNativeWidget同时显示点云和模型