Как получить месяц с даты в mysql
Я хочу иметь возможность извлекать результаты из mysql с помощью следующего выражения:
SELECT *
FROM table
WHERE amount > 1000
Но я хочу получить результат, ограниченный определенным месяцем и годом (на основе ввода от пользователя)... Я пробовал вот так:
SELECT *
FROM table
WHERE amount > 1000
AND dateStart = MONTH('$m')
... $m
- месяц, но он дал ошибку.
В этой таблице на самом деле есть две даты: startDate
и endDate
, но я фокусируюсь на startDate
. Входными значениями будут месяц и год. Как я выражаю выражение SQL, которое получает результаты, основанные на этом месяце того года?
Ответы
Ответ 1
Вы были близки - получили сравнение назад (если startDate
- тип данных DATETIME или TIMESTAMP):
SELECT *
FROM table
WHERE amount > 1000
AND MONTH(dateStart) = {$m}
Предостережение:
Альтернативы:
Поскольку использование функций в столбцах не может использовать индексы, лучшим подходом было бы использовать функции BETWEEN
и STR_TO_DATE
:
WHERE startdate BETWEEN STR_TO_DATE([start_date], [format])
AND STR_TO_DATE([end_date], [format])
См. документацию по синтаксису форматирования.
Справка:
Ответ 2
Используйте функцию month()
.
select month(now());
Ответ 3
например.
$date = sprintf("'%04d-%02d-01'", $year, $month);
$query = "
SELECT
x,y,dateStart
FROM
tablename
WHERE
AND amount > 1000
AND dateStart >= $date
AND dateStart < $date+Interval 1 month
";
mysql_query($query, ...
Это создаст запрос, например,
WHERE
AND amount > 1000
AND dateStart >= '2010-01-01'
AND dateStart < '2010-01-01'+Interval 1 month
+ Interval 1 month
является альтернативой date_add().
SELECT Date('2010-01-01'+Interval 1 month)
→ 2010-02-01
SELECT Date('2010-12-01'+Interval 1 month)
→ 2011-01-01
Таким образом, вы всегда получаете первый день следующего месяца. Записи, которые вы хотите, должны иметь дату начала до этой даты, но после/равны первому дню месяца (и года), который вы передали в sprintf().
'2010-01-01'+Interval 1 month
не меняется между строками. MySQL будет вычислять термин только один раз и может использовать индексы для поиска.
Ответ 4
Попробуйте следующее:
SELECT *
FROM table
WHERE amount > 1000 AND MONTH(dateStart) = MONTH('$m') AND YEAR(dateStart) = YEAR('$m')
Ответ 5
Попробуйте это
SELECT *
FROM table
WHERE amount > 1000
AND MONTH(datestart)
GROUP BY EXTRACT(YEAR_MONTH FROM datestart)
Ответ 6
Попробуйте это, если (поле даты - это текст, затем преобразуйте эту строку в дату):
SELECT * FROM `table_name` WHERE MONTH(STR_TO_DATE(date,'%d/%m/%Y'))='11'
//This will give month number MONTH(STR_TO_DATE(date,'%d/%m/%Y'))
//If its return 11 then its November
// Change date format with your date string format %d/%m/%Y
Ответ 7
Работает в: MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23
-
день
SELECT EXTRACT(DAY FROM "2017-06-15");
-
Месяц
SELECT EXTRACT(MONTH FROM "2017-06-15");
-
Год выпуска:
SELECT EXTRACT(YEAR FROM "2017-06-15");