1、分时间查询
举例表名:order 日期查询字段:create_time
1.1 今日数据
1 | select * from `order` where to_days(now()) = to_days(create_time) |
1.2 前某天数据(当天,如昨天1、前天2)
1 | SELECT * FROM `order` where DATEDIFF(NOW(), create_time) = 时间间隔 |
1.3 前几天数据(时间段,如1表示昨天+今天、2表示前天+昨天+今天)
1 | SELECT * FROM `order` where DATEDIFF(NOW(), create_time) <= 时间间隔 |
或者
1 | SELECT * FROM `order` where DATE_SUB(CURDATE(), INTERVAL 时间间隔 DAY) <= date(create_time) |
1.4 本周数据
此处需要注意,外国人的一周是从周日开始的,中国人普遍是从周一开始的
1、周一开始
的本周数据
1 | SELECT * FROM `order` where YEARWEEK(date_format(create_time,'%Y-%m-%d'),1) = YEARWEEK(now(),1) |
2、周日开始
的本周数据
1 | SELECT * FROM `order` where YEARWEEK(date_format(create_time, '%Y-%m-%d')) = YEARWEEK(now()) |
如需前几周的数据直接在
YEARWEEK(now(),1)
后相减即可,注意区分时间点和时间段的区别
1.5 本月数据
1 | SELECT * FROM `order` where DATE_FORMAT(create_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m') |
1.6 前某个月数据(时间点)
1 | SELECT * FROM `order` where PERIOD_DIFF(date_format(now(), '%Y%m'), date_format(create_time, '%Y%m')) = 时间间隔 |
1.7 前几个月数据(时间段)
1 | SELECT * FROM `order` where PERIOD_DIFF(date_format(now(), '%Y%m'), date_format(create_time, '%Y%m')) <= 时间间隔 |
1.8 本季度数据
查询季度使用的是
QUARTER()
函数,但是这个函数仅能返回是第几季度,如12月份会返回4,即第四季度。所以必须限制年份YEAR()函数
,不然你查询1季度的数据可能会返回今年+往年的第一季度数据。
1 | SELECT * FROM `order` where YEAR(create_time) = YEAR(NOW()) and QUARTER(create_time) = QUARTER(now()) |
1.9 前某个季度数据(时间点)
1 | SELECT * FROM `order` where YEAR(create_time) = YEAR(NOW()) and QUARTER(create_time) = QUARTER(DATE_SUB(now(), interval 时间间隔 QUARTER)) |
1.9 本年数据
1 | SELECT * FROM `order` where YEAR(create_time) = YEAR(NOW()) |
1.10 前某年数据(时间点)
1 | SELECT * FROM `order` YEAR(create_time) = YEAR(DATE_SUB(now(), interval 时间间隔 YEAR )) |
2、修改数据
2.1 数字加减
1 | UPDATE `order` SET order_price = order_price + 数字 WHERE order_id =2 |
数字加减需注意
原数字为null
的情况,所以我们在建表的时候尽可能的为字段设置默认值,或者在添加操作时,为以后需要修改的值添加一个默认值。
如果遇到确实存在或者可能存在null
的现象,我们需要多做一步处理,避免异常出现
1 | UPDATE `order` SET order_price = ifnull(order_price, 0) + 数字 WHERE order_id =2 |
使用
ifnull()
函数为可能为null的字段添加一个默认值(不只是0,可以根据情况而定)
2.2 字符串追加
字符串追加同样会存在上述问题,不多赘述,使用时注意。
1 | UPDATE `order` SET remark = CONCAT(ifnull(remark, ''), 追加值) WHERE order_id =2 |
- 本文作者: tenyears
- 本文链接: https://tenyears94.gitee.io/2021/01/13/常见SQL语句记录/
- 版权声明: 本博客所有文章转载请注明出处!