如何从postgres SQL中的日期中仅获取日期/月份部分

Sur*_*uri 20 sql postgresql

大家好 我在我的pg admin数据库中有一个表.这个表中有一个雇员表.拥有该字段: - 1)名称2)date_of_birth

现在的情况是我想知道当前日期和即将到来的20天的出生日例如,如果当前日期是2013年1月28日那么

1)from_date=28-Jan-2013
2)to_date=16-feb-2013
Run Code Online (Sandbox Code Playgroud)

我想从表中选择date_of_birth的所有记录

lies between 28-Jan and 16-feb
Run Code Online (Sandbox Code Playgroud)

bon*_*igo 40

试试这个:

SELECT *
FROM   bdaytable
WHERE  bdate >= '2013-01-28'::DATE
AND    bdate <= '2013-02-16'::DATE;
Run Code Online (Sandbox Code Playgroud)

您也可以尝试overlaps:

SELECT *
FROM bdaytable
WHERE (bdate, bdate) 
OVERLAPS ('2013-01-28'::DATE, '2013-02-16'::DATE);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

结合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');
Run Code Online (Sandbox Code Playgroud)


sge*_*des 0

我认为这应该有效。使用interval

SELECT * 
FROM Employee
WHERE Date_Of_Birth >= now() AND Date_Of_Birth <= now() + interval '20 day'
Run Code Online (Sandbox Code Playgroud)

如果您想获得这几天之间的任何出生日期(年份并不重要),那么情况会略有不同。

编辑

如果年份不重要,虽然我确信有更好的方法,但这是可行的。基本上,它只是将所有年份转换为普通年份(在本例中为 2000)——您也可以对输入参数执行相同的操作。

(Date_Of_Birth + (2000-EXTRACT(YEAR FROM Date_Of_Birth) || ' years')::interval)
Run Code Online (Sandbox Code Playgroud)

好奇其他人过去使用过什么,因为这可能不是最有效的。

祝你好运。