Выберите mySQL только на месяц и год

У меня есть столбец в моей базе данных mySQL с несколькими строками. Одна из этих строк – DATE, например: 2012-02-01

То, что я хочу достичь, – это сделать SELECT с PHP на основе только года и месяца.

Логикой SELECT будет следующая:

 $q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH""; 

Конкретный месяц и год будут передаваться из переменной $_POST , например $_POST['period']="2012-02";

Как мне это сделать?

 SELECT * FROM projects WHERE YEAR(Date) = 2011 AND MONTH(Date) = 5 

Если у вас есть

 $_POST['period'] = "2012-02"; 

Сначала найдите первый день месяца:

 $first_day = $_POST['period'] . "-01" 

Затем этот запрос будет использовать индекс в Date если он есть:

 $q = " SELECT * FROM projects WHERE Date BETWEEN '$first_day' AND LAST_DAY( '$first_day' ) " ; 

Можно также использовать инклюзивные эксклюзивные интервалы, которые работают довольно хорошо (вам не нужно беспокоиться, если столбец DATE , DATETIME или TIMESTAMP , а также точность:

 $q = " SELECT * FROM projects WHERE Date >= '$first_day' AND Date < '$first_day' + INTERVAL 1 MONTH " ; 

Ну вот. Оставьте вычисления на PHP и сохраните свою работу DB. Таким образом, вы можете эффективно использовать индекс в столбце Date .

 <?php $date = $_POST['period']; $start = strtotime($date); $end = strtotime($date . ' 1 month - 1 second'); $query = sprintf( 'SELECT * FROM projects WHERE Date BETWEEN FROM_UNIXTIME(%u) AND FROM_UNIXTIME(%u)', $start, $end ); 

РЕДАКТИРОВАТЬ
Забыл преобразовать временную метку Unix.

Здесь, FIND запись MONTH и DATE в mySQL

Вот ваше значение POST $_POST['period']="2012-02";

Просто взорвите значение по тире $Period = explode('-',$_POST['period']);

Получить массив от значения взрыва:

Array ( [0] => 2012 [1] => 02 )

Положите значение в SQL Query:

SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';

Получите результат MONTH и YEAR.

 $q="SELECT * FROM projects WHERE YEAR(date) = 2012 AND MONTH(date) = 1; 

Вы можете сделать так:

 $q="SELECT * FROM projects WHERE Year(Date) = '$year' and Month(Date) = '$month'"; 

Логика будет:

 SELECT * FROM objects WHERE Date LIKE '$_POST[period]-%'; 

Оператор LIKE выберет все строки, начинающиеся с $_POST['period'] а затем тире и дня месяца

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html – Дополнительная информация

для получения значений месяца и года из столбца даты

 select year(Date) as "year", month(Date) as "month" from Projects 

Да, это работает, но он возвращает одну строку только в том случае, когда есть несколько строк для извлечения, используя только выбранные столбцы. Подобно SELECT Title, Date FROM mytable WHERE YEAR (Date) = 2017 AND MONTH (Date) = 09 возвращает только одну строку.