Подтвердить что ты не робот

Как получить только дату/месяц с даты в 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
4b9b3361

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

Любопытно, что другие использовали в прошлом, поскольку это, вероятно, не самый эффективный.

Удачи.