Hello All J'ai une table dans ma base de données d'administration pg. Il y a une table employee dans cette table.Avec le champ: - 1) name 2) date_of_birth
Maintenant, le scénario est celui où je veux connaître le jour de naissance pour la date actuelle et les 20 jours à venir.
1)from_date=28-Jan-2013
2)to_date=16-feb-2013
Je veux sélectionner tous les enregistrements de la table pour lesquels le date de naissance
lies between 28-Jan and 16-feb
Essaye ça:
SELECT *
FROM bdaytable
WHERE bdate >= '2013-01-28'::DATE
AND bdate <= '2013-02-16'::DATE;
Vous pouvez également essayer overlaps
:
SELECT *
FROM bdaytable
WHERE (bdate, bdate)
OVERLAPS ('2013-01-28'::DATE, '2013-02-16'::DATE);
SELECT *
FROM bdaytable
WHERE Extract(month from bdate) >= Extract(month from '2013-01-28'::DATE)
AND Extract(month from bdate) <= Extract(month from '2013-02-16'::DATE)
AND Extract(day from bdate) >= Extract(day from '2013-01-28'::DATE)
AND Extract(day from bdate) <= Extract(day from '2013-02-16'::DATE);
Incorporer Now()
et interval
pour rendre la requête dynamique avec la date du jour:
SELECT *
FROM bdaytable
WHERE Extract(month from bdate) >= Extract(month from Now())
AND Extract(month from bdate) <= Extract(month from Now() + Interval '20 day')
AND Extract(day from bdate) >= Extract(day from Now())
AND Extract(day from bdate) <= Extract(day from Now() + Interval '20 day');
select *
from employee
where
to_char(date_of_birth, 'MMDD') between
to_char(current_date, 'MMDD') and to_char(current_date + 20, 'MMDD')
Je pense que cela devrait fonctionner. Utilisez interval
.
SELECT *
FROM Employee
WHERE Date_Of_Birth >= now() AND Date_Of_Birth <= now() + interval '20 day'
Si vous voulez avoir une date de naissance entre ces jours (et l'année importe peu), alors ce serait légèrement différent.
MODIFIER
Si l'année n'a pas d'importance, alors que je suis sûr qu'il existe une meilleure façon, cela pourrait fonctionner. En gros, il s'agit simplement de convertir toutes les années en une année commune (dans ce cas, 2000). Vous pouvez également faire de même avec votre paramètre d'entrée.
(Date_Of_Birth + (2000-EXTRACT(YEAR FROM Date_Of_Birth) || ' years')::interval)
Curieux de savoir ce que d’autres ont utilisé dans le passé car ce n’est probablement pas le plus efficace.
Bonne chance.