当前位置:网站首页>[Mysql] DATEDIFF函数
[Mysql] DATEDIFF函数
2022-07-30 05:30:00 【iijik55】
DATEDIFF函数用于返回两个日期的天数
语法格式
DATEDIFF(date1,date2)
参数说明
date1: 比较日期1
date2: 比较日期2
DATEDIFF函数返回date1 - date2的计算结果,date1和date2两个参数需是有效的日期或日期时间值;如果参数传递的是日期时间值,DATEDIFF函数仅将日期部分用于计算,并忽略时间部分(只有值的日期部分参与计算)
示例
-- 1
SELECT DATEDIFF('2022-04-30','2022-04-29');
-- 0
SELECT DATEDIFF('2022-04-30','2022-04-30');
-- -1
SELECT DATEDIFF('2022-04-29','2022-04-30');
-- 0
SELECT DATEDIFF('2022-04-30','2022-04-30 14:00:00');
-- 1
SELECT DATEDIFF('2022-04-30 13:00:00','2022-04-29 14:00:00');
-- 10
SELECT DATEDIFF('2017-06-25 09:34:21', '2017-06-15');
DATEDIFF函数与TIMESTAMPDIFF函数的区别
1.DATEDIFF函数仅用于返回两个日期的天数,TIMESTAMPDIFF函数用于返回计算两个日期指定单位的时间差(指定单位可以是年,季度,月,星期,天数,小时,分钟,秒等等)
2.对日期差值的计算方式相反
DATEDIFF函数的语法格式: DATEDIFF(start,end)
DATEDIFF函数返回start - end的计算结果
TIMESTAMPDIFF函数的语法格式: TIMESTAMPDIFF(DAY,start,end)
TIMESTAMPDIFF函数返回end - start的计算结果
-- -2 SELECT DATEDIFF('2022-04-28', '2022-04-30'); -- 2 SELECT TIMESTAMPDIFF(DAY,'2022-04-28', '2022-04-30');
3.如果时间是YYYY-MM-DD HH:MM:SS格式,在计算天数差时,TIMESTAMPDIFF使用的是24小时制,即使是23:59:59,也不算做是一天,而DATEDIFF则是直接截取日期的部分相减。那么此时使用两个函数计算出来的天数是不一样的
-- -2 SELECT DATEDIFF('2022-04-30 00:00:00','2022-04-28 23:59:59'); -- 1 SELECT TIMESTAMPDIFF(DAY,'2022-04-28 23:59:59', '2022-04-30 00:00:00');
时间格式为YYYY-MM-DD HH:MM:SS时,使用两个函数的结果是不同的,需要根据具体的业务场景进行选择
练习案例
导入数据
DROP TABLE IF EXISTS coupon_collection;
CREATE TABLE coupon_collection(
user_id VARCHAR(8),
collection_date DATE
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO
coupon_collection (user_id,collection_date)
VALUE ('u001','2021-05-01')
,('u002','2021-05-01')
,('u003','2021-05-02')
,('u004','2021-05-02')
,('u005','2021-05-03');
DROP TABLE IF EXISTS consumption_info;
CREATE TABLE consumption_info(
user_id VARCHAR(8),
consumption_date DATE
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO
consumption_info (user_id,consumption_date)
VALUE ('u002','2021-04-28')
,('u001','2021-04-29')
,('u001','2021-05-03')
,('u003','2021-05-05')
,('u005','2021-05-06')
,('u001','2021-05-08')
,('u004','2021-05-09')
,('u006','2021-05-09')
,('u003','2021-05-10')
,('u002','2021-05-10');
coupon_collection表(电商优惠券领取表)
user_id:用户ID (VARCHAR类型) collection_date:领取优惠券日期(DATE类型)
consumption_info表(电商消费情况表)
user_id:用户ID (VARCHAR类型) consumption_date:消费日期 (DATE类型)
问题:用户领取的优惠券次日生效,并在之后的7天内购物时自动生效,使用次数不限。要求获取成功使用优惠券消费的用户及其对应的消费次数(输出格式:user_id,num)
user_id:成功使用消费券消费的用户ID num:消费次数
SELECT a.user_id, COUNT(collection_date)AS num
FROM coupon_collection AS a
INNER JOIN consumption_info AS b
ON a.user_id = b.user_id
WHERE DATEDIFF(b.consumption_date,a.collection_date) BETWEEN 1 AND 7
GROUP BY a.user_id;
结果展示:
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- MySQL基础(DDL、DML、DQL)
- 行业案例|数字化经营底座助力寿险行业转型
- Participate in open source, let programmers regain their blood and passion
- 1475. 商品折扣后的最终价格
- 微信小程序开发学习
- mysql基础(4)
- How MySQL to prepare SQL pretreatment (solve the query IN SQL pretreatment can only query out the problem of a record)
- Docker-compose安装mysql
- nacos-2.0.3启动报错出现no datasource set的坑
- Divide and conquer. L2-025
猜你喜欢
Hexagon_V65_Programmers_Reference_Manual (10)
idea设置自动带参数的方法注释(有效)
程序员赚钱实操,手把手教你做付费课程,自媒体,付费文章及付费技术课赚钱
一文带你吃透js处理树状结构数据的增删改查
Participate in open source, let programmers regain their blood and passion
暴力递归到动态规划 05 (贴纸拼词)
Kyligence 出席华为全球智慧金融峰会,加速拓展全球市场
This article will take you through js to deal with the addition, deletion, modification and inspection of tree structure data
开源之夏 2022 与您相约!
MySQL Basics (DDL, DML, DQL)
随机推荐
“幻核”跑路,数字藏品路在何方?
剑指offer(刷题篇12)
Golang——从入门到放弃
Hexagon_V65_Programmers_Reference_Manual (11)
无代码开发平台重新申请入门教程
JVM 内存结构 超详细学习笔记(一)
MySQL kills 10 questions, how many questions can you stick to?
Kyligence 入选 Gartner 2022 数据管理技术成熟度曲线报告
Docker-compose install mysql
JVM 类加载机制 超详细学习笔记(三)
号称年薪30万占比最多的专业,你知道是啥嘛?
即刻报名|前沿技术探索:如何让 Spark 更强劲、更灵活
盘点 | 常用 PG 数据恢复方案概览【建议收藏】
最新版MySQL 8.0 的下载与安装(详细教程)
无代码开发平台子管理员入门教程
罗湖区工匠技能领军人才奖励项目申请指南
Programmers make money and practice, teach you how to do paid courses, self-media, paid articles and paid technical courses to make money
How can I make (a == 1 && a == 2 && a == 3) to be true?
容器化 | 在 KubeSphere 中部署 MySQL 集群
丑陋的程序员