使用日期字段中存储的年份从数据库中选择行数

时间:2011-08-28 03:22:24

标签: mysql sql aggregate-functions

任何人都可以使用年份帮助我从数据库表中获取总记录数吗?

我有一张桌子 - 我将考试日期保存在日期字段中。我需要使用仅年份从该表中获取总记录数。

我正在使用mysql。

这是我的表

|  e_id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| exam_name   | varchar(50) | NO   |     | NULL    |                |
| exam_date   | date        | NO   |     | NULL    |                |

我需要在特定的一年内完成考试总数

3 个答案:

答案 0 :(得分:1)

您可以在@ Brian的答案中使用DATE_FORMAT()等函数,或使用YEAR()这样的函数:

SELECT COUNT(*) as total 
FROM table 
WHERE YEAR(date_field) = 2011

但是,如果表的行数超过几千行,这种方法将不会很快,因为它必须完全扫描整个表并将该函数应用于表的所有记录。在任何情况下,最好是有一个类似@Ruslan的条件(如果它是DATETIME字段)或者像这样的DATE字段:

WHERE date_field BETWEEN '2011-01-01' AND '2011-12-31'

我更喜欢适用于(DATE或DATETIME)类型的条件:

WHERE date_field >= '2011-01-01' 
  AND date_field <  '2012-01-01'

如果date_field上有索引,则查询将使用索引进行计数而不扫描整个表格,并且速度会快很多倍。

答案 1 :(得分:0)

在MYSQL中,您可以执行以下操作:

BETWEEN '2010-05-31 00:00:00' AND '2010-06-06 23:59:59' 

正如您想按年份查询一样,那就是:

BETWEEN '2005-01-01 00:00:00' AND '2011-11-31 23:59:59' 

希望有所帮助;)

答案 2 :(得分:0)

我认为这就是你想要的?你的问题有点含糊不清。 SELECT COUNT(*) as 'total' FROM table WHERE DATE_FORMAT(date_field,'%Y') = '2011'

table是您的表格的名称,date_field是您的表格中存储日期的字段,然后您可以用您尝试搜索的任何年份替换2011。 / p>