2016-02-17 4 views
1

В настоящее время у меня есть код, который выбирает определенные SQL-запросы на основе определенной информации. В настоящее время, как это:Выбор месяца и года для SQL

$sql = "SELECT * FROM transaction WHERE id_task = '2' AND id_child = '$number' AND MONTH(datetime) = MONTH('2016-02-13 20:36:41')"; 

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

+1

и год (DateTime) = YEAR ('2016-02-13 20:36:41')? –

+1

Вы можете использовать то же самое, что и в течение месяца: 'AND YEAR (datetime) = YEAR ('some date ...')' - https://dev.mysql.com/doc/refman/5.5/en/date-and -время-functions.html # function_year –

ответ

1

Наивный решение было бы так:

MONTH(datetime) = MONTH('2016-02-13 20:36:41') 
and YEAR(datetime) = YEAR('2016-02-13 20:36:41') 

, но лучше и более производительный подход, который может использовать индекс заключается в следующем:

WHERE 
    datetime>=subdate(date('2016-02-13 20:36:41'), (day('2016-02-13 20:36:41')-1)) 
    and datetime<last_day('2016-02-13 20:36:41')+interval 1 day 

это будет рассчитать первый день данного месяца:

subdate(date('2016-02-13 20:36:41'), (day('2016-02-13 20:36:41')-1)) 

, который рассчитает первый день o е на следующий месяц:

last_day('2016-02-13 20:36:41')+interval 1 day 

так что вы можете просто использовать >=first_day_of_given_month и <first_day_of_next_month

Смежные вопросы