返回当前年度的所有mySQL记录

suzh9iv8  于 5个月前  发布在  Mysql
关注(0)|答案(4)|浏览(46)

在mySQL中,我想返回当前年份(如2012年,而不是过去一年时间段内)具有start_date的记录的计数,以及(作为一个单独的查询)上一年(如现在的情况下,2011年)的记录计数。
我的开始日期是这样存储的:2012-12-02。我使用PHP。
帮助我如何形成这些查询将不胜感激。

vxf3dgd4

vxf3dgd41#

SELECT COUNT(*)
 FROM TABLE1
 WHERE YEAR(START_DATE) = YEAR(CURDATE());

字符串

zed5wv10

zed5wv102#

您可能希望使用YEAR函数从日期中获取YEAR,并在比较中使用相同的值。

SELECT COUNT(*)
 FROM TABLE1
 WHERE YEAR(START_DATE) = 2012;

字符串
与上一年不同的查询:

SELECT COUNT(*)
 FROM TABLE1
 WHERE YEAR(START_DATE) = 2011;


获取年份明智计数:

SELECT COUNT(b.YEAR), b.YEAR
 FROM TABLE1 AS a JOIN 
    (SELECT DISTINCT YEAR(START_DATE) AS YEAR from TABLE1) AS b
    ON YEAR(START_DATE) = b.YEAR
 GROUP BY b.YEAR;

lokaqttq

lokaqttq3#

两点建议:
您可以使用日期筛选数据:

select count(*) from tbl where start_date >= '2012-01-01'

字符串

select count(*) from tbl where start_date between '2012-01-01' and '2012-12-31'


此外,您可以使用year()函数过滤数据:

select count(*) from tbl where year(start_date) = 2012


希望这能帮助你
如果您使用PHP(或任何其他高级编程语言),您可以在运行时构建查询字符串以满足您的需求(例如,过滤不同年份的记录)。
要显示2012年之前start_date的记录计数,只需更改where条件:

select... where year(start_date) < 2012


select... where start_date < '2012-01-01'

n6lpvg4x

n6lpvg4x4#

正如Rostyslav Pylypenko在上面的评论中指出的那样,公认的答案不会使用指数。获得当年记录的更好方法是:

SELECT COUNT(*)
FROM `table`
WHERE start_date >= DATE_FORMAT(NOW() ,'%Y-01-01');

字符串
您可以应用相同的逻辑来获取上一年的计数:

SELECT COUNT(*)
FROM `table`
WHERE start_date >= DATE_FORMAT(NOW() - INTERVAL 1 YEAR ,'%Y-01-01')
    AND start_date < DATE_FORMAT(NOW() ,'%Y-01-01');

相关问题