MySQL日期相关

目录

1.日期函数

1.1获取时间

1.2日期加减

1.2.1DATE_ADD:为日期加一个时间间隔

1.2.2DATE_SUB:为日期减一个时间间隔 

1.2.3ADDTIME:为日期增加秒数

 1.2.4ADDDATE:为日期增加日期

1.3日期差值

1.3.1DATEDIFF

1.3.2TIMESTAMPDIFF

2.特殊日期获取

2.1上月月初

 2.2上月月底

2.3本月月初

2.4本月月底

2.5下月月初

2.6下月月底

3.日期格式转换 

3.1DATE_FORMAT函数

3.2 字符转日期STR_TO_DATE

3.3数字转日期

 4.日期和时间数据类型


1.日期函数

1.1获取时间

MySQL提供了多种方法来获取当前日期、时间和时间戳

以下是一些常用的MySQL时间函数

函数日期格式
NOW()YYYY-MM-DD hh:mm:ss
CURDATE()YYYY-MM-DD
CURTIME()hh:mm:ss
CURRENT_TIMESTAMP()YYYY-MM-DD hh:mm:ss

实例:当前日期时间

SELECT NOW()

结果:

2024-08-07 03:13:50

1.2日期加减

Mysql中日期时间的加减,可以使用DATE_ADD(),DATE_SUB(),ADDTIME(),ADDDATE()等函数

1.2.1DATE_ADD:为日期加一个时间间隔

语法:

DATE_ADD(date,INTERVAL expr type)

其中

  • date:指定的日期时间
  • expr :要加的时间间隔
  • type:时间间隔单位

实例:日期增加1天

SELECT DATE_ADD('2024-08-07',INTERVAL 1 day) 

结果:

2024-08-08

实例:日期加1年

SELECT DATE_ADD('2024-08-07',INTERVAL 1 year) 

结果: 

 2025-08-07

1.2.2DATE_SUB:为日期减一个时间间隔 

语法:

DATE_SUB(date,INTERVAL expr type)

其中

  • date:指定的日期时间
  • expr :要减的时间间隔
  • type:时间间隔单位

实例:日期减一天

SELECT DATE_SUB('2024-08-07',INTERVAL 1 day) 

结果: 

 2024-08-06 

1.2.3ADDTIME:为日期增加秒数

语法:

ADDTIME(date,expr )

其中

  • date:指定的日期时间
  • expr :要加的秒数(小于60)

实例:日期加17秒

SELECT ADDTIME('2024-08-07 03:13:50',17) 

结果:

2024-08-07 03:14:07 

 1.2.4ADDDATE:为日期增加日期

语法:

ADDDATE(date[,INTERVAL] expr [type])

其中

  • date:指定的日期时间
  • expr :要加的时间间隔
  • type:时间间隔单位

当只有expr参数时表示增加指定天数;当三个参数都存在时,表示增加指定时间间隔

实例:日期加1天

SELECT ADDDATE('2024-08-07 03:13:50',1) 

结果:

2024-08-08 03:13:50

实例:日期加 4个月

SELECT ADDDATE('2024-08-07 03:13:50',INTERVAL 4 month) 

结果:

2024-12-07 03:13:50

1.3日期差值

1.3.1DATEDIFF

MySQL用DATEDIFF来计算2个日期之间的相差天数

语法:

DATEDIFF(date1,date2)

其中,date1和date2是要进行比较的两个日期。DATEDIFF函数会返回date1减去date2得到天值差数

实例:

SELECT DATEDIFF('2024-08-07','2024-08-01') ,DATEDIFF('2024-08-01','2024-08-07') 

 结果:

6,-6

1.3.2TIMESTAMPDIFF

在MySQL中,可以使用TIMESTAMPDIFF函数来求出两个日期之间相差间隔时间

语法:

TIMESTAMPDIFF(unit,date1,date2)

其中,unit是时间单位,可以是SECOND、MINUTE、HOUR、DAY等;date1和date2是要进行比较的两个日期或时间戳。

实例:

SELECT TIMESTAMPDIFF(SECOND,'2024-03-13 05:30:13','2024-05-30 04:28:23')

 结果:

6735490

2.特殊日期获取

2.1上月月初

实例:

SELECT DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 day),INTERVAL 1 month)

 结果:

2024-07-01

 2.2上月月底

实例:

SELECT DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) day)

结果:

2024-07-31 

2.3本月月初

实例:

SELECT DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 day)

结果:

2024-08-01  

2.4本月月底

实例:

SELECT  DATE_SUB(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 day),INTERVAL 1 month),INTERVAL 1 day)

结果:

2024-08-31

2.5下月月初

实例:

SELECT  DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 day),INTERVAL 1 month)

结果:

2024-09-01 

2.6下月月底

实例:

SELECT  DATE_SUB(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 day),INTERVAL 2 month),INTERVAL 1 day)

结果:

2024-09-30

3.日期格式转换 

3.1DATE_FORMAT函数

MySQL可以通过DATE_FORMAT函数将日期转成想要的格式

语法:

DATE_FORMAT(date,format)

其中,date是要转换的日期,format是转成的格式 

format日期时间格式化符号示例:

符号格式
%Y四位年份
%y两位年份
%m两位月份
%c月份(不会有0的前缀)
%d两位日期
%H二十四小时制小时(00-23)
%h十二小时制小时(01-12)
%i两位分钟
%s两位秒数
%pAM或PM

实例:

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') 

结果:

2024-08-07 03:13:50 

3.2 字符转日期STR_TO_DATE

MySQL中的STR_TO_DATE函数可以将一个字符串转换为日期类型。

语法:

STR_TO_DATE(str,format)

其中,str是要转换成日期的字符串,format表示输入字符串str的日期格式。若str符合format格式,择会将str转换成日期,否则返回NULL,可以由此判断字符是否可以转成日期

实例:

SELECT STR_TO_DATE('2024-09-01', '%Y-%m-%d'),STR_TO_DATE('2024-09-01', '%Y%m%d')

 结果:

2024-09-01,NULL

3.3数字转日期

数字可以先转成字符,再通过STR_TO_DATE函数转成日期

实例:

SELECT STR_TO_DATE(convert(20240901,CHAR), '%Y%m%d')

结果:

2024-09-01

 4.日期和时间数据类型

MySQL常见日期类型有

日期类型格式范围
DATEYYYY-MM-DD'1000-01-01' to '9999-12-31'
TIMEhh:mm:ss'-838:59:59.000000' to '838:59:59.000000'
DATETIMEYYYY-MM-DD hh:mm:ss '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.499999'
TIMESTAMPYYYY-MM-DD hh:mm:ss ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC 
YEARYYYY1901 ~ 2155

 一般建表时候,创建时间用datetime,更新时间用timestamp。

MySQL默认自动给第一个timestamp字段加上DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP对日期进行自动更新,第二个及之后的timestamp字段则没有这个默认条件。若想取消这个条件,可以使用NULL DEFAULT NULL。

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值