MySQL日期操作

MySQL常用日期函数

函数描述
NOW()返回当前的日期和时间
CURDATE()返回当前的日期
CURTIME()返回当前的时间
DATE()提取日期或日期/时间表达式的日期部分
EXTRACT()返回日期/时间按的单独部分
DATE_ADD()给日期添加指定的时间间隔
DATE_SUB()从日期减去指定的时间间隔
DATEDIFF()返回两个日期之间的天数
DATE_FORMAT()用不同的格式显示日期/时间

1、获取当前日期时间

# 获取当前日期时间
SELECT NOW();
SELECT LOCALTIME();
SELECT LOCALTIME;
SELECT LOCALTIMESTAMP();
SELECT LOCALTIMESTAMP;
SELECT CURRENT_TIMESTAMP();
SELECT CURRENT_TIMESTAMP;
SELECT SYSDATE();

# 获取当前日期
SELECT CURDATE();
SELECT CURRENT_DATE();
SELECT CURRENT_DATE;
SELECT DATE(NOW());

# 获取当前时间
SELECT CURTIME();
SELECT CURRENT_TIME();
SELECT CURRENT_TIME;
SELECT TIME(NOW());

# 获取UTC日期时间
SELECT UTC_TIMESTAMP(), UTC_DATE(), UTC_TIME()

2、获取日期的年、月、日、时、分、秒

# 对于时间2022-05-20 08:30:16,分别获取其年、月、日、时、分、秒
SELECT EXTRACT(YEAR FROM NOW()); # 2022(年)
SELECT EXTRACT(MONTH FROM NOW()); # 5(月)
SELECT EXTRACT(DAY FROM NOW()); # 20(日)
SELECT EXTRACT(HOUR FROM NOW()); # 8(小时)
SELECT EXTRACT(MINUTE FROM NOW()); # 30(分钟)
SELECT EXTRACT(SECOND FROM NOW()); # 16(秒)
SELECT EXTRACT(MICROSECOND FROM NOW()); # 0(毫秒)
SELECT EXTRACT(QUARTER FROM NOW()); # 2(季度)
SELECT EXTRACT(WEEK FROM NOW()); # 20(日期在年度中第几周)

SELECT EXTRACT(SECOND FROM '2022-05-20 08:30:16');  # 16

SELECT YEAR(NOW()); # 2022(年)
SELECT MONTH(NOW()); # 5(月)
SELECT DAY(NOW()); # 20(日)
SELECT HOUR(NOW()); # 8(小时)
SELECT MINUTE(NOW()); # 30(分钟)
SELECT SECOND(NOW()); # 16(秒)
SELECT MICROSECOND(NOW()); # 0(毫秒)
SELECT QUARTER(NOW()); # 2(季度)
SELECT WEEK(NOW()); # 20(日期在年度中第几周)
SELECT DAYOFYEAR(NOW()); # 140(日期在年度中第几天)

SELECT DAYOFWEEK(NOW()); # 6(日期在周中第几天;周日为第1天)
SELECT WEEKDAY(NOW()); # 4(日期在周中第几天;周一为第0天)

 
SELECT DAYNAME(NOW()); # Friday(返回英文星期)
SELECT MONTHNAME(NOW()); # May(返回英文月份)
SELECT LAST_DAY(NOW()); # 2022-05-31(返回月份中最后一天)

3、日期格式化

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

SELECT TIME_FORMAT(NOW(), '%H:%i:%s');

4、日期转换

# 字符串转日期
SELECT STR_TO_DATE('2022-05-20 08:30:16', '%Y-%m-%d %H:%i:%s');

# 时间转秒
SELECT TIME_TO_SEC('01:00:00'); # 3600

# 秒转时间
SELECT SEC_TO_TIME(3600); # 01:00:00

# 时间转时间戳
SELECT UNIX_TIMESTAMP(); # 1653046990
SELECT UNIX_TIMESTAMP('2022-05-20'); # 1652976000
SELECT UNIX_TIMESTAMP('2022-05-20 08:30:16'); # 1653006616

# 时间戳转时间
SELECT FROM_UNIXTIME(1653006616); # 2022-05-20 08:30:16
SELECT FROM_UNIXTIME(1653006616, '%Y-%m-%d %h:%i:%s'); # 2022-05-20 08:30:16

5、日期增加、减少

# 获取三十天后日期
SELECT DATE_SUB(CURDATE(), INTERVAL -30 DAY);
SELECT DATE_ADD(CURDATE(), INTERVAL 30 DAY);
SELECT TIMESTAMPADD(DAY, 30, CURDATE());

# 获取三十天前日期
SELECT DATE_SUB(CURDATE(), INTERVAL 30 DAY);
SELECT DATE_ADD(CURDATE(), INTERVAL -30 DAY);
SELECT TIMESTAMPADD(DAY, -30, CURDATE());

# 获取一周后日期
SELECT DATE_SUB(CURDATE(), INTERVAL -1 WEEK);
SELECT DATE_ADD(CURDATE(), INTERVAL 1 WEEK);
SELECT TIMESTAMPADD(WEEK, 1, CURDATE());

# 获取一月后日期
SELECT DATE_SUB(CURDATE(), INTERVAL -1 MONTH);
SELECT DATE_ADD(CURDATE(), INTERVAL 1 MONTH);
SELECT TIMESTAMPADD(MONTH, 1, CURDATE());

# 获取一年后日期
SELECT DATE_SUB(CURDATE(), INTERVAL -1 YEAR);
SELECT DATE_ADD(CURDATE(), INTERVAL 1 YEAR);
SELECT TIMESTAMPADD(YEAR, 1, CURDATE());

6、时区转换

SELECT CONVERT_TZ(NOW(), '+08:00', '+00:00');

7、获取时差

SELECT TIMESTAMPDIFF(YEAR, '2017-06-14 00:00:00', '2018-07-15 08:12:25');
SELECT TIMESTAMPDIFF(MONTH, '2017-06-14 00:00:00', '2018-07-15 08:12:25');
SELECT TIMESTAMPDIFF(DAY, '2017-06-14 00:00:00', '2018-07-15 08:12:25');
SELECT TIMESTAMPDIFF(WEEK, '2017-06-14 00:00:00', '2018-07-15 08:12:25');
SELECT TIMESTAMPDIFF(HOUR, '2017-06-14 00:00:00', '2018-07-15 08:12:25');
SELECT TIMESTAMPDIFF(MINUTE, '2017-06-14 00:00:00', '2018-07-15 08:12:25');
SELECT TIMESTAMPDIFF(SECOND, '2017-06-14 00:00:00', '2018-07-15 08:12:25');

8、获取日期范围的数据 

# 查询未来的数据
select * from table1 where NOW()<=date(create_time);

# 查询未来三十天的数据(精确到秒)
select * from table1 where NOW()<=date(create_time) and date(create_time) <=DATE_SUB(CURDATE(),INTERVAL -30 DAY)

# 查询未来三十天的数据(精确到天)
select * from table1 WHERE TO_DAYS(NOW()) <= TO_DAYS(date(create_time)) AND TO_DAYS(date(create_time)) <= TO_DAYS(DATE_ADD(CURDATE(), INTERVAL 30 DAY));

# 查询当天数据
select * from table1 where TO_DAYS(create_time) = TO_DAYS(NOW());

# 查询昨天数据
select * from table1 where TO_DAYS(NOW()) - TO_DAYS(create_time) = 1
 
# 近7天
select * from table1 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time)
 
# 近30天
select * from table1 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(create_time)
 
# 查询本季度数据
select * from table1 where QUARTER(create_time) = QUARTER(now());
 
# 查询上季度数据
select * from table1 where QUARTER(create_time) = QUARTER(DATE_SUB(now(), INTERVAL 1 QUARTER));
 
# 查询本年数据
select * from table1 where YEAR(create_time) = YEAR(NOW());
 
# 查询上年数据
select * from table1 where YEAR(create_time) = YEAR(date_sub(now(), INTERVAL 1 YEAR));
 
# 查询当前这周的数据
select * from table1 where YEARWEEK(date_format(create_time,'%Y-%m-%d')) = YEARWEEK(NOW());
 
# 查询上周的数据
select * from table1 where YEARWEEK(date_format(create_time,'%Y-%m-%d')) = YEARWEEK(NOW())-1;

# 查询上个月数据
select * from table1 where date_format(create_time,'%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');

select * from table1 where PERIOD_DIFF(date_format(NOW(), '%Y%m'), date_format(create_time, '%Y%m')) = 1;

# 查询当月数据
select * from table1 where DATE_FORMAT(create_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m');
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值