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'
相关推荐
迷路剑客17 分钟前
ES-7.10-高亮HighLight知识点总结
java·数据库·mybatis
程序边界21 分钟前
解锁时序数据新玩法:金仓数据库实战体验分享
数据库
汉堡go33 分钟前
python_chapter6
前端·数据库·python
范纹杉想快点毕业33 分钟前
嵌入式工程师一年制深度进阶学习计划(纯技术深耕版)
linux·运维·服务器·c语言·数据库·算法
storyseek39 分钟前
关于Milvus向量数据库的基础
数据库·milvus
步步为营DotNet1 小时前
深入探究.NET中Stream:灵活高效的数据流处理核心
服务器·数据库·.net
❀͜͡傀儡师1 小时前
基于提供的镜像构建PostGIS、pgvector 的 PostgreSQL 18镜像的Dockerfile
数据库·postgresql·postgis
消失的旧时光-19431 小时前
第五课:数据库不是存数据那么简单 —— MySQL 与索引的后端视角
数据库·mysql
nice_lcj5202 小时前
MySQL中GROUP_CONCAT函数详解 | 按日期分组拼接销售产品经典案例
数据库·mysql
key1s2 小时前
在 clickhouse时间降序排序解决方案
数据库