Ответ 1
select * from table_name
where (date between DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE() )
Или лучше:
select * from table_name
where (date between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )
Мне нужно выбрать данные из базы данных MySQL между 1-м днем текущего месяца и текущим днем.
select*from table_name
where date between "1st day of current month" and "current day"
Может ли кто-нибудь предоставить рабочий пример этого запроса?
select * from table_name
where (date between DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE() )
Или лучше:
select * from table_name
where (date between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )
Я искал аналогичный запрос, где мне нужно было использовать первый день месяца в моем запросе.
Функция last_day
не работала для меня, но DAYOFMONTH
пригодится.
Итак, если кто-то ищет ту же проблему, следующий код возвращает дату первого дня текущего месяца.
SELECT DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY);
Сравнение столбца даты с первым днем месяца:
select * from table_name where date between
DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) and CURRENT_DATE
select * from table_name
where `date` between curdate() - dayofmonth(curdate()) + 1
and curdate()
Я использовал следующий запрос. В прошлом он отлично работал у меня.
select date(now()) - interval day(now()) day + interval 1 day
попробуйте следующее:
SET @StartDate = DATE_SUB(DATE(NOW()),INTERVAL (DAY(NOW())-1) DAY);
SET @EndDate = ADDDATE(CURDATE(),1);
select * from table where (date >= @StartDate and date < @EndDate);
select * from table
where date between
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;
Полное решение для текущего месяца и текущего года mysql, которое также использует индексирование:)
-- Current month
SELECT id, timestampfield
FROM table1
WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY)
AND timestampfield <= LAST_DAY(CURRENT_DATE);
-- Current year
SELECT id, timestampfield
FROM table1
WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFYEAR(CURRENT_DATE)-1 DAY)
AND timestampfield <= LAST_DAY(CURRENT_DATE);
select * from <table>
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
and curdate();
Менее ортодоксальный подход может быть
SELECT * FROM table_name
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7)
AND table_name.date <= CURDATE();
как дата между первым месяцем и теперь эквивалентна дате, которая находится в этом месяце, и до этого. Я чувствую, что это немного легче для глаз, чем некоторые другие подходы, однако.
SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;
Я использовал этот select DATE_ADD(DATE_SUB(LAST_DAY(now()), INTERVAL 1 MONTH),INTERVAL 1 day) first_day , LAST_DAY(now()) last_day, date(now()) today_day
У меня было кое-что похожее требование - к find first day of the month
, но на основе year end month
, выбранного пользователем на странице своего профиля.
Постановка проблемы - найдите все txns
, выполненные пользователем в его/ее финансовом году. Financial year
определяется с использованием значения месяца year end
, где month
может быть любым действительным месяцем - 1 for Jan
, 2 for Feb
, 3 for Mar
,.... 12 for Dec
.
Для некоторых клиентов financial year end
в March
, а некоторые наблюдают это в December
.
Scenarios - (Today is '08 Aug, 2018')
1. If 'financial year' ends on 'July' then query should return '01 Aug 2018'.
2. If 'financial year' ends on 'December' then query should return '01 January 2018'.
3. If 'financial year' ends on 'March' then query should return '01 April 2018'.
4. If 'financial year' ends on 'September' then query should return '01 October 2017'.
И, наконец, ниже приведен запрос. -
select @date := (case when ? >= month(now())
then date_format((subdate(subdate(now(), interval (12 - ? + month(now()) - 1) month), interval day(now()) - 2 day)) ,'%Y-%m-01')
else date_format((subdate(now(), interval month(now()) - ? - 1 month)), '%Y-%m-01') end)
где ?
- это year end
месяц (значения от 1 до 12).
Я оказался здесь после того, как мне понадобился тот же самый запрос для некоторых запросов бизнес-аналитики, которые я запускаю в интернет-магазине. Я хотел добавить свое решение, так как оно может быть полезным для других.
set @firstOfLastLastMonth = DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL -2 MONTH)),INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL -2 MONTH)))-1 DAY);
set @lastOfLastLastMonth = LAST_DAY(DATE_ADD(NOW(), INTERVAL -2 MONTH));
set @firstOfLastMonth = DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH)),INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH)))-1 DAY);
set @lastOfLastMonth = LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH));
set @firstOfMonth = DATE_ADD(@lastOfLastMonth, INTERVAL 1 DAY);
set @today = CURRENT_DATE;
@firstOfLastLastMonth = '2019-08-01'
@lastOfLastLastMonth = '2019-08-31'
@firstOfLastMonth = '2019-09-01'
@lastOfLastMonth = '2019-09-30'
@firstOfMonth = '2019-10-01'
@today = '2019-10-08'
SET @date:='2012-07-11';
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY),
interval -1 MONTH) AS first_day