网站首页 > 基础教程 正文
mysql制作报表、统计等都常常需要用到日期函数和区间范围查询。那mysql怎么查询今天、昨天、近7天、近30天、本周、上周、本月、上月、本季度、上季度、今年、去年的数据呢?
这里以时间戳为例。如果是datetime类型,以下示例请去掉FROM_UNIXTIME函数即可。
-- 今天
SELECT * FROM `order` WHERE TO_DAYS(FROM_UNIXTIME(`add_time`)) = TO_DAYS(now());
-- 昨天
SELECT * FROM `order` WHERE TO_DAYS(now()) - TO_DAYS(FROM_UNIXTIME(`add_time`)) = 1;
-- 近7天
SELECT * FROM `order` WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= DATE(FROM_UNIXTIME(`add_time`));
-- 近30天
SELECT * FROM `order` WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= DATE(FROM_UNIXTIME(`add_time`));
-- 本周
SELECT * FROM `order` WHERE YEARWEEK(DATE(FROM_UNIXTIME(`add_time`))) = YEARWEEK(now());
-- 上周
SELECT * FROM `order` WHERE YEARWEEK(now()) - YEARWEEK(DATE(FROM_UNIXTIME(`add_time`))) = 1;
-- 本月
SELECT * FROM `order` WHERE DATE_FORMAT(FROM_UNIXTIME(`add_time`),'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');
-- 上月
SELECT * FROM `order` WHERE PERIOD_DIFF(DATE_FORMAT(CURDATE(),'%Y%m'), DATE_FORMAT(FROM_UNIXTIME(`add_time`),'%Y%m')) = 1;
-- 本季度
SELECT * FROM `order` WHERE QUARTER(FROM_UNIXTIME(`add_time`)) = QUARTER(now());
-- 上季度
SELECT * FROM `order` WHERE QUARTER(FROM_UNIXTIME(`add_time`)) = QUARTER(DATE_SUB(now(),INTERVAL 1 QUARTER));
-- 今年
SELECT * FROM `order` WHERE YEAR(FROM_UNIXTIME(`add_time`)) = YEAR(now())
-- 去年
SELECT * FROM `order` WHERE YEAR(FROM_UNIXTIME(`add_time`)) = YEAR(DATE_SUB(now(),INTERVAL 1 YEAR));
日期函数
以上示例应用到的日期函数
TO_DAYS(date)
给定一个日期date, 返回一个天数 (从年份0开始的天数 )。
SELECT TO_DAYS(now());
-- 737118
UNIX_TIMESTAMP(date)
它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回,即时间戳。
SELECT UNIX_TIMESTAMP(now());
-- 1519747201
FROM_UNIXTIME(unix_timestamp)
将时间戳转时间格式,如:返回'YYYY-MM-DD HH:MM:SS'
SELECT FROM_UNIXTIME(1519755184);
-- 2018-02-28 00:00:01
DATE_SUB(date,INTERVAL expr type)
函数从日期减去指定的时间间隔。
SELECT DATE_SUB(now(),INTERVAL 1 DAY);
-- 2018-02-27 00:00:01
CURDATE()
将当前日期按照'YYYY-MM-DD' 或YYYYMMDD 格式的值返回。
SELECT CURDATE();
-- 2018-02-28
DATE(expr)
提取日期或时间日期表达式expr中的日期部分。
SELECT DATE(now());
-- 2018-02-28
DATE_FORMAT(date,format)
根据format 字符串安排date 值的格式。
SELECT DATE_FORMAT(now(),'%Y-%m');
-- 2018-02
YEARWEEK(date)
返回一个日期对应的年或周
SELECT YEARWEEK(now());
-- 201808
PERIOD_DIFF(P1,P2)
返回周期 P1 和 P2 之间的月份数,P1 和P2 的格式应该为YYMM或YYYYMM
SELECT PERIOD_DIFF('201802', '201801')
-- 1
QUARTER(date)
返回date 对应的一年中的季度值,范围是从 1到 4
SELECT QUARTER(now())
-- 1
YEAR(date)
返回date 对应的年份,范围是从1000到9999。
SELECT YEAR(now())
-- 2018
猜你喜欢
- 2024-11-07 VBA编程,利用DatePart函数获取特定日期
- 2024-11-07 MySQL引起的CPU消耗过大,你会如何优化?
- 2024-11-07 高级数据分析师必备SQL常用处理函数,我觉得收藏是必须的
- 2024-11-07 每日SQL自学知识点(第三天)—lead的窗口函数、datediff函数
- 2024-11-07 mysql与时间有关的查询 mysql与时间有关的查询方法
- 2024-11-07 面试官:如何正确的清理Mysql数据库binlog日志?
- 2024-11-07 数据库丨从MySQL数值隐式转换成了double型的测试点,值得学习
- 2024-11-07 限定Excel数据使用时间,到期自动销毁,这2种方法都能轻松搞定
- 2024-11-07 关于Mysql数据库清理binlog日志命令总结
- 2024-11-07 「MySQL入门」快来看看MySQL函数就是这么简单
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)