mysql如何查询本年_mysql 查询本月、本年的数据
最近策劃給了博主一個這樣的需求:
用戶投放一次垃圾后,在數據庫增加一條垃圾投放記錄,并給它相應的積分。
然后。用戶可以獲取自己本月、本年的總積分(將每條記錄的積分加起來)排名。
這里附上建表語句
CREATE TABLE `launch_info` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`userId` int(10) NOT NULL COMMENT '用戶id',
`time` datetime(0) NOT NULL COMMENT '投放時間',
`weight` double(10, 2) NOT NULL COMMENT '本次投放重量',
`score` int(8) NOT NULL COMMENT '本次投放獲取的積分',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `launch_info` VALUES (3, 1, '2019-05-29 20:01:01', 10.00, 100);
INSERT INTO `launch_info` VALUES (4, 1, '2019-05-29 20:05:22', 10.00, 100);
INSERT INTO `launch_info` VALUES (5, 2, '2019-05-12 10:18:20', 20.00, 200);
INSERT INTO `launch_info` VALUES (6, 3, '2019-05-13 10:18:38', 15.00, 10);
INSERT INTO `launch_info` VALUES (7, 2, '2018-05-12 10:12:12', 10.00, 123);
INSERT INTO `launch_info` VALUES (8, 3, '2019-05-30 22:29:29', 10.00, 50);
INSERT INTO `launch_info` VALUES (9, 4, '2019-05-02 21:16:50', 0.00, 0);
INSERT INTO `launch_info` VALUES (10, 3, '2019-04-05 22:38:36', 1.00, 1000);
INSERT INTO `launch_info` VALUES (11, 5, '2019-05-23 23:40:20', 1.00, -1);
好吧。問題要一個一個來解決。
第一個問題-------怎么根據時間來查詢本月、本年的總積分呢
select userId,sum(weight) total_weight
from launch_info where userId = 1
and DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
附查詢的sql語句如上所示,其實這條語句就是一個普通的查詢語句,只是在后面加了一個
and DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
這里說明一下這條語句。DATE_FORMAT()函數,顧名思義,是一個將日期格式化的函數。然后這里的 CURDATE()是獲取當前的時間,這條語句的意思就是將這條記錄的時間和現在的時間同時按這個格式化規則進行格式化,如果結果相同,就代表了是本月的。
那么查詢本年的數據也是一樣的,只要把這條語句改成
and DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y')
或者是
YEAR(time)=YEAR(NOW())
就行了。
emmm,雖然策劃是只要求博主做查詢本月和本年的記錄,但是萬一以后又遇到要查本天的、半年之內的。。。。
所以,博主干脆一次性的做個記錄把,也順帶分享給大家。
Let's go
查詢本天
TO_DAYS(time) = TO_DAYS(NOW())
查詢n天之前的
TO_DAYS(NOW()) - TO_DAYS(time) = ?
比如查昨天的 n 就等于1,查前天的n就等于2.(博主好像有點啰嗦)
查詢前n天之內的(包括了今天)
DATE_SUB(CURDATE(), INTERVAL ? DAY) < date(time)
DATE_SUB() 函數的功能是從日期減去指定的時間間隔。
查詢本月
DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
查詢第n個月前的
WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'), DATE_FORMAT(time,'%Y%m')) = ?
PERIOD_DIFF(P1,P2)函數的功能是返回周期P1和P2之間的月數。 P1和P2格式為YYMM或YYYYMM
查詢n個月之內的
DATE_SUB(CURDATE(), INTERVAL ? MONTH) < time
查詢本年
DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y')
或
YEAR(time)=YEAR(NOW())
哎呀,太多了。博主已經不想再往下寫了,等以后如果用到了博主再加上來把。
emmm,剩下的問題就是根據總分來對用戶進行排名了。
具體操作請參見博主下一篇博客
https://blog.csdn.net/zhousw1999/article/details/89742059
總結
以上是生活随笔為你收集整理的mysql如何查询本年_mysql 查询本月、本年的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql o转数字排序_mysql学习
- 下一篇: ubuntu 导入mysql_Ubunt