Выбор количества строк в базе данных с использованием года, хранящегося в поле даты - PullRequest
0 голосов
/ 28 августа 2011

Может ли кто-нибудь помочь мне получить общее количество записей из таблицы базы данных, используя год?

У меня есть таблица - в ней я сохранил дату экзамена в поле даты. Мне нужно получить общее количество записей из этой таблицы, используя только год.

Я использую mysql.

Это мой стол

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

Мне нужно получить общее количество экзаменов, проведенных только за определенный год

Ответы [ 3 ]

1 голос
/ 28 августа 2011

Вы можете использовать такие функции, как DATE_FORMAT() в ответе @ Brian или функцию YEAR(), например:

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

Однако этот подход не будет быстрым, если в таблице большенесколько тысяч строк, потому что для этого придется полностью просканировать всю таблицу и применить функцию ко всем записям таблицы.В любом случае лучше иметь условие типа @ Ruslan's (если это поле 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, запрос будет использовать индекс для подсчета без сканирования полной таблицы и будет много разбыстрее.

0 голосов
/ 28 августа 2011

Я думаю, это то, что вы хотите?Ваш вопрос немного неопределенный, хотя.SELECT COUNT(*) as 'total' FROM table WHERE DATE_FORMAT(date_field,'%Y') = '2011'

table - это имя вашей таблицы, date_field - это поле в вашей таблице, где хранится дата, и тогда вы можете просто заменить 2011 на любой год, который вы пытаетесь найти.

0 голосов
/ 28 августа 2011

В 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' 

Надеюсь, что поможет;)

...