ВЫБЕРИТЕ строку по DATEPART()

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

$result = mysql_query("SELECT * FROM my_table WHERE DATEPART('month', date_column)=11");

В базе данных много строк с датой в 11-м месяце, но я не получаю никаких результатов. Может кто-нибудь мне помочь? Благодарить!


person user1827257    schedule 15.11.2012    source источник
comment
Пожалуйста, не используйте функции mysql_*, так как они находятся в процессе устаревания. Используйте MySQL или PDO и стать лучшим PHP-разработчиком.   -  person Jason McCreary    schedule 15.11.2012
comment
даже с минимальной обработкой ошибок вы бы узнали, почему это не работает: $result = mysql_query(...) or die(mysql_error());. никогда НИКОГДА не предполагайте, что запрос удался. ВСЕГДА проверяйте на наличие ошибок.   -  person Marc B    schedule 15.11.2012


Ответы (3)


В MySQL нет функции DATEPART. Используйте MONTH(date_column) или EXTRACT(MONTH FROM date_column) вместо этого.

person MvG    schedule 15.11.2012

Если у вас есть индекс для date_column и вы беспокоитесь о производительности, лучше НЕ применять функции к столбцу. (Имейте в виду, что это решение не отвечает точно на то, что вы просили, потому что оно также включает год)

-- For mysql specific:
SELECT * FROM my_table
WHERE date_column >= '2012-11-01' 
  and date_column < '2012-11-01' + INTERVAL 1 MONTH

(скрипт mysql)

-- For tsql specific:
SELECT * FROM my_table
WHERE date_column >= '2012-11-01'
  and date_column < DATEADD(month,1,'2012-11-01')

(скрипт tsql)

person Luis Siquot    schedule 15.11.2012

Если ваш DATEPART не работает в MySQL, вы можете использовать:

SELECT * 
FROM MyTable 
WHERE MONTH(joiningDate) = MONTH(NOW())-1 
  AND YEAR(joiningDate) = YEAR(NOW());

Он вернет все записи, которые были вставлены в MyTable за последний месяц.

person Shubham Verma    schedule 14.12.2017