Je dois sélectionner des données de la base de données MySQL entre le premier jour du mois en cours et le jour en cours.
select*from table_name
where date between "1st day of current month" and "current day"
Quelqu'un peut-il fournir un exemple de travail de cette requête?
select * from table_name
where (date between DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE() )
Ou mieux :
select * from table_name
where (date between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW() )
Je cherchais une requête similaire dans laquelle je devais utiliser le premier jour du mois dans ma requête . La fonction last_day
ne fonctionnait pas pour moi, mais DAYOFMONTH
était pratique.
Ainsi, si quelqu'un recherche le même problème, le code suivant renvoie la date du premier jour du mois en cours.
SELECT DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY);
Comparer une colonne de date avec le premier jour du mois:
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()
J'ai utilisé la requête suivante. Cela a très bien fonctionné pour moi par le passé.
select date(now()) - interval day(now()) day + interval 1 day
essaye ça :
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 <dateValue> between last_day(curdate() - interval 1 month + interval 1 day)
and curdate();
Solution complète pour le mois et l'année courant mysql, qui utilise également correctement l'indexation :)
-- 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 date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month;
select * from table
where date between
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date;
Une approche moins orthodoxe pourrait être
SELECT * FROM table_name
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7)
AND table_name.date <= CURDATE();
comme une date comprise entre le premier du mois et maintenant équivaut à une date de ce mois et avant maintenant. Je pense que c'est un peu plus facile pour les yeux que d'autres approches, cependant.
J'avais quelques exigences similaires - à find first day of the month
mais sur la base de year end month
sélectionné par l'utilisateur dans sa page de profil.
Enoncé du problème - retrouvez toutes les txns
faites par l'utilisateur au cours de son exercice financier. Financial year
est déterminé à l'aide de year end
mois, où month
peut être n'importe quel mois valide: 1 for Jan
, 2 for Feb
, 3 for Mar
, ....12 for Dec
.
Pour certains clients, financial year end
s sur March
et d’autres l’observent sur 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`.
Et enfin, ci-dessous se trouve la requête. -
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)
où ?
est year end
mois (valeurs de 1 à 12).
J'ai utilisé celui-ci 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