日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql如何查询本年_mysql 查询本月、本年的数据

發(fā)布時(shí)間:2025/3/20 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql如何查询本年_mysql 查询本月、本年的数据 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近策劃給了博主一個(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。