mysql如何查询本年_mysql 查询本月、本年的数据
最近策劃給了博主一個(gè)這樣的需求:
用戶投放一次垃圾后,在數(shù)據(jù)庫(kù)增加一條垃圾投放記錄,并給它相應(yīng)的積分。
然后。用戶可以獲取自己本月、本年的總積分(將每條記錄的積分加起來)排名。
這里附上建表語句
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 '投放時(shí)間',
`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);
好吧。問題要一個(gè)一個(gè)來解決。
第一個(gè)問題-------怎么根據(jù)時(shí)間來查詢本月、本年的總積分呢
select userId,sum(weight) total_weight
from launch_info where userId = 1
and DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
附查詢的sql語句如上所示,其實(shí)這條語句就是一個(gè)普通的查詢語句,只是在后面加了一個(gè)
and DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
這里說明一下這條語句。DATE_FORMAT()函數(shù),顧名思義,是一個(gè)將日期格式化的函數(shù)。然后這里的 CURDATE()是獲取當(dāng)前的時(shí)間,這條語句的意思就是將這條記錄的時(shí)間和現(xiàn)在的時(shí)間同時(shí)按這個(gè)格式化規(guī)則進(jìn)行格式化,如果結(jié)果相同,就代表了是本月的。
那么查詢本年的數(shù)據(jù)也是一樣的,只要把這條語句改成
and DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y')
或者是
YEAR(time)=YEAR(NOW())
就行了。
emmm,雖然策劃是只要求博主做查詢本月和本年的記錄,但是萬一以后又遇到要查本天的、半年之內(nèi)的。。。。
所以,博主干脆一次性的做個(gè)記錄把,也順帶分享給大家。
Let's go
查詢本天
TO_DAYS(time) = TO_DAYS(NOW())
查詢n天之前的
TO_DAYS(NOW()) - TO_DAYS(time) = ?
比如查昨天的 n 就等于1,查前天的n就等于2.(博主好像有點(diǎn)啰嗦)
查詢前n天之內(nèi)的(包括了今天)
DATE_SUB(CURDATE(), INTERVAL ? DAY) < date(time)
DATE_SUB() 函數(shù)的功能是從日期減去指定的時(shí)間間隔。
查詢本月
DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
查詢第n個(gè)月前的
WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'), DATE_FORMAT(time,'%Y%m')) = ?
PERIOD_DIFF(P1,P2)函數(shù)的功能是返回周期P1和P2之間的月數(shù)。 P1和P2格式為YYMM或YYYYMM
查詢n個(gè)月之內(nèi)的
DATE_SUB(CURDATE(), INTERVAL ? MONTH) < time
查詢本年
DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y')
或
YEAR(time)=YEAR(NOW())
哎呀,太多了。博主已經(jīng)不想再往下寫了,等以后如果用到了博主再加上來把。
emmm,剩下的問題就是根據(jù)總分來對(duì)用戶進(jìn)行排名了。
具體操作請(qǐng)參見博主下一篇博客
https://blog.csdn.net/zhousw1999/article/details/89742059
總結(jié)
以上是生活随笔為你收集整理的mysql如何查询本年_mysql 查询本月、本年的数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql o转数字排序_mysql学习
- 下一篇: ubuntu 导入mysql_Ubunt