Как получить только дату/месяц с даты в postgres SQL
Привет всем
У меня есть таблица в моей базе данных pg admin. В этой таблице есть таблица employee. Имея поле: -
1) наименование
2) date_of_birth
Теперь сценарий заключается в том, что я хочу знать день рождения для текущей даты и предстоящих 20 дней
Например, если текущая дата - 28 января 2013 года, то
1)from_date=28-Jan-2013
2)to_date=16-feb-2013
Я хочу выбрать все записи из таблицы, для которой
date_of_birth
lies between 28-Jan and 16-feb
Ответы
Ответ 1
Попробуйте следующее:
SELECT *
FROM bdaytable
WHERE bdate >= '2013-01-28'::DATE
AND bdate <= '2013-02-16'::DATE;
Вы также можете попробовать overlaps
:
SELECT *
FROM bdaytable
WHERE (bdate, bdate)
OVERLAPS ('2013-01-28'::DATE, '2013-02-16'::DATE);
с extract
, month
, day
:
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);
Включить Now()
и interval
, чтобы сделать динамический запрос с текущей датой:
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');
Ответ 2
select *
from employee
where
to_char(date_of_birth, 'MMDD') between
to_char(current_date, 'MMDD') and to_char(current_date + 20, 'MMDD')
Ответ 3
Я думаю, это должно сработать. Используйте interval
.
SELECT *
FROM Employee
WHERE Date_Of_Birth >= now() AND Date_Of_Birth <= now() + interval '20 day'
Если вы хотите получить дату рождения между этими днями (и год не имеет значения), это будет немного отличаться.
ИЗМЕНИТЬ
Если год не имеет значения, хотя я уверен, что есть лучший способ, это может сработать. В основном это просто конвертирует все годы в общий год (в этом случае 2000) - вы можете сделать то же самое с вашим входным параметром.
(Date_Of_Birth + (2000-EXTRACT(YEAR FROM Date_Of_Birth) || ' years')::interval)
Любопытно, что другие использовали в прошлом, поскольку это, вероятно, не самый эффективный.
Удачи.