Как выбрать между 1-м днем текущего месяца и текущим днем в MySQL?

Мне нужно выбрать данные из базы данных MySQL между 1-м днем ​​текущего месяца и текущим днем.

select*from table_name 
where date between "1st day of current month" and "current day"

Может ли кто-нибудь предоставить рабочий пример этого запроса?

Ответ 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() )

Ответ 2

Я искал аналогичный запрос, где мне нужно было использовать первый день месяца в моем запросе. Функция 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

Ответ 3

select * from table_name 
where `date` between curdate() - dayofmonth(curdate()) + 1
                 and curdate()

Пример SQLFiddle

Ответ 4

Я использовал следующий запрос. В прошлом он отлично работал у меня.

select date(now()) - interval day(now()) day + interval 1 day

Ответ 5

попробуйте следующее:

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);

Ответ 6

select * from table
where date between 
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;

Ответ 7

Полное решение для текущего месяца и текущего года 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);

Ответ 8

select * from <table>
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
                  and curdate();

Ответ 9

Менее ортодоксальный подход может быть

SELECT * FROM table_name 
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7)
  AND table_name.date <= CURDATE();

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

Ответ 10

SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;

Ответ 11

Я использовал этот 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

Ответ 12

У меня было кое-что похожее требование - к 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).

Ответ 13

Я оказался здесь после того, как мне понадобился тот же самый запрос для некоторых запросов бизнес-аналитики, которые я запускаю в интернет-магазине. Я хотел добавить свое решение, так как оно может быть полезным для других.

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;

Сегодня 2019-10-08, поэтому выходные данные выглядят как

@firstOfLastLastMonth = '2019-08-01'
@lastOfLastLastMonth = '2019-08-31'
@firstOfLastMonth = '2019-09-01'
@lastOfLastMonth = '2019-09-30'
@firstOfMonth = '2019-10-01'
@today = '2019-10-08'

Ответ 14

SET @date:='2012-07-11';
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY), 
       interval -1 MONTH) AS first_day