大家好 我在我的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)
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)
我认为这应该有效。使用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)
好奇其他人过去使用过什么,因为这可能不是最有效的。
祝你好运。