还是Mysql时间处理的记录

mysql时间处理的问题
每天一个小问题,今天的问题是这样,在我们开发过程中,会遇到这样的需求,就是得到数据库中,今年的,去年的,本月的,上个月的,或者今天的,昨天的记录,这时候我们一般会有一个创建时间字段去匹配,比如我这里字段如下:

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

这里我们假设表是 student表,首先我们来解释一下DATE_FORMAT()函数和DATE_SUB()函数
DATE_FORMAT就是日期格式化,至于DATE_SUB是从日期减去指定的时间间隔,语法:

DATE_SUB(date,INTERVAL expr type)
  1. date: 合法的日期表达式
  2. INTERVAL: 语法固定写法
  3. expr: 间隔时间
  4. type: 时间类型

下面是对应的sql:

//今日
SELECT
 *
FROM
  student
WHERE
  DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(CURRENT_DATE(), '%Y-%m-%d')
//昨日
SELECT
 *
FROM
  student
WHERE
  DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY), '%Y-%m-%d')
//本月
SELECT
 *
FROM
  student
WHERE
DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(CURRENT_DATE(), '%Y-%m')
//上个月
SELECT
 *
FROM
  student
WHERE
DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m')
//今年
SELECT
 *
FROM
  student
WHERE
DATE_FORMAT(create_time, '%Y') = DATE_FORMAT(CURRENT_DATE(),  '%Y')
//去年
SELECT
 *
FROM
  student
WHERE DATE_FORMAT(create_time, '%Y') = 
DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL  1 YEAR), '%Y')

这里我们测试都通过了,不过如果我们改成这样的写法是取不到去年12月的数据的,

	 SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL MONTH(CURRENT_DATE()) - 1 MONTH), '%Y-%m')

同理可知,这种写法不适合拿到上个月月底是昨天或者去年年底是上个月,千万注意了!!!
补充一下本周和上周的,还有本季度和上季度的

//本周
	select * from student where DATE_FORMAT(create_time, '%Y-%u') = DATE_FORMAT(CURRENT_DATE(), '%Y-%u')
//上周
	SELECT * FROM studen
WHERE DATE_FORMAT(create_time, '%Y-%u') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 WEEK), '%Y-%u')
//还有本季度
SELECT
	* 
FROM
	student 
WHERE
 QUARTER(create_time) = QUARTER(CURDATE()) and YEAR(create_time) = YEAR(CURDATE())
 //上季度
 SELECT
	* 
FROM
	student
WHERE
 QUARTER(create_time) = QUARTER(DATE_SUB(CURDATE(),1 QUARTER)) and YEAR(create_time) = YEAR(CURDATE())
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值