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'
相关推荐
振鹏Dong16 分钟前
Redis核心机制解析:数据结构、线程模型与内存管理策略
数据结构·数据库·redis
凯子坚持 c2 小时前
Redis ZSET 深度剖析:从命令、原理到实战
数据库·redis·哈希算法
维他奶糖612 小时前
mysql数据库和redis数据库的安装
数据库·mysql
007php0073 小时前
使用 Docker、Jenkins、Harbor 和 GitLab 构建 CI/CD 流水线
数据库·ci/cd·docker·容器·golang·gitlab·jenkins
尚学教辅学习资料10 小时前
SSM从入门到实战:2.5 SQL映射文件与动态SQL
数据库·sql·动态sql·sql映射
大新屋10 小时前
MongoDB 分片集群把非分片集合转成分片集合
数据库·mongodb
Python代狂魔11 小时前
Redis
数据库·redis·python·缓存
余衫马11 小时前
Mysql 5.7 与 SqlSugar 5.X 整合开发实战
mysql·c#·orm·sqlsugar
柠檬茶AL11 小时前
36 NoSQL 注入
数据库·nosql·postman
-XWB-11 小时前
PostgreSQL诊断系列(2/6):锁问题排查全攻略——揪出“阻塞元凶”
数据库·postgresql