mysql日期时间函数

当前时间
复制代码
> SELECT CURDATE(),CURTIME(),NOW();
->2024-01-10 | 10:47:18  | 2024-01-10 10:47:18 
> select sysdate();
->2024-01-10 10:47:18 

NOW()

返回当前日期时间,返回格式要么是字符串"YYYY-MM-DD HH-MM-SS"格式,要么是数字YYYYMMDDhhmmss格式,取决于使用函数上下文。

复制代码
>SELECT NOW(), NOW() + 1
 ->2024-01-10 09:54:00|20240110095401

直接使用默认字符串,+1用作数字处理。sysdate()和now()类似。只是两个表示的时间稍微有些差别,now()表示当前语句开始执行时间点,在一个语句中多次通过now()获取时间是相同的,sysdate()而是当前时点的时间,是一直在增加的。

复制代码
> SELECT NOW(), SLEEP(2), NOW();
-> 2024-01-10 14:06:49 |        0 | 2024-01-10 14:06:49 
> SELECT SYSDATE(), SLEEP(2), SYSDATE();
-> 2024-01-10 14:07:03 |        0 | 2024-01-10 14:07:05 

当前日期curdate,当前时间CURTIME。分别获取日期和时间部分。

时间戳转时间
复制代码
> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
 2024-01-10 14:19:36 

有时候会将时间戳存起来记录时间,可以使用FROM_UNIXTIME将时间戳转成时间。

时间抽取

从日期/时间值中提取特定部分的值。语法如下:EXTRACT(unit FROM date)

EXTRACT(unit FROM date)其中,unit表示要提取的时间单位,可以是MONTH、DAY、HOUR、MINUTE等,文章最后有unit的可选值列表

date表示要提取的日期/时间值。

复制代码
>SELECT EXTRACT(YEAR from NOW())
 ->2024
>SELECT EXTRACT(HOUR from NOW())
 ->9
>SELECT EXTRACT(QUARTER FROM '2019-07-02')
 ->3

除了使用extract函数获取对应时间部分,每一部分都有对应的函数来获取datetime指定部分的值

复制代码
>SELECT YEAR(NOW()),DAY(NOW()),MONTH(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())
 -> 2024 |         10 |            1 |          10 |            12 |            41 |
时间计算

DATE_ADD(date,INTERVAL expr unit),DATE_SUB(date,INTERVAL expr unit)

expr表示时间间隔间隔,可以是负数,unit表示时间单位。

date_add表示加上多少时间,date_sub(subtracted )表示减去多少时间

复制代码
> SELECT DATE_ADD('2024-01-01',INTERVAL 1 DAY);
 -> 2024-01-02 
> SELECT DATE_ADD('2024-01-01',INTERVAL 1 YEAR);
 ->2025-01-01 

两个日期时间差DATEDIFF()

复制代码
> SELECT DATEDIFF('2023-12-31','2023-11-30');
->31
>SELECT DATEDIFF('2023-12-31 23:59:59','2024-01-09');
->-9

计算两个日期相差的天数,只有日期部分会被使用。第一个减去第二个

按指定时间单位计算时间差TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

复制代码
> SELECT TIMESTAMPDIFF(MONTH,'2023-02-01','2023-05-01');
->3
> SELECT TIMESTAMPDIFF(MINUTE,'2023-12-31','2023-12-31 12:00:55');
->720
> SELECT TIMESTAMPDIFF(SECOND,'2023-12-31','2023-12-31 00:01:30')
->90
月初月末

当前时间所在月份最后一天LAST_DAY(date)

复制代码
> SELECT LAST_DAY(NOW());
->2024-01-31

借助last_day和date_add获取月初

复制代码
>SELECT DATE_ADD(LAST_DAY(NOW()),INTERVAL 1 DAY)
->2024-01-31
获取日期次序
复制代码
> SELECT DAYOFYEAR('2023-12-31'),DAYOFMONTH('2023-12-31'),DAYOFWEEK('2023-12-31');
->365 |                       31 |                       1 

DAYOFYEAR:一年中第几天(1~366)

DAYOFMONTH:当月第几天(1~31)

DAYOFWEEK:周几(1 = 周日, 2 = 周一, ..., 7 = 周六)

日期格式化

DATE_FORMAT(date,format) 日期按指定格式输出。

常见格式:

年:%Y (4位年),%y(2位年)

月:%m(01~12),%M(名称January...December),%c (1~12没有前导0)

日:%d (01~31), %e (1~31没有前导0)

时:%H (24小时制00...23),%h(12小时制00~12),

分:%i(00~59)

秒:%s %S (不区分大小写,00~59)

微秒:%f (000000...999999)

上午下午:%p (AM或PM)

周几:%w (0周日,6周六)

一年中第几天:%j (001...366)

复制代码
> SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
->2024-01-10 11:24:55 
时间单位

前面在一些时间函数中,如EXTRACT,TIMESTAMPDIFF,DATE_ADD中有unit时间单位参数,下面是一些时间单位的值选项说明。

unit (时间单位) expr 值格式
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'
相关推荐
冉冰学姐1 分钟前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly8 分钟前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
斯普信专业组15 分钟前
构建基于MCP的MySQL智能运维平台:从开源服务端到交互式AI助手
运维·mysql·开源·mcp
Elastic 中国社区官方博客16 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.20 分钟前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐24 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999927 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学1 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.1 小时前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集