20

こんにちはすべて 私は私のpgadminデータベースにテーブルを持っています。このテーブルには従業員テーブルがあります。フィールドを持っています:1)名前2)date_of_birth

ここでのシナリオは、現在の日付と今後20日間の誕生日を知りたいというものです。たとえば、現在の日付が2013年1月28日の場合、

1)from_date=28-Jan-2013
2)to_date=16-feb-2013

date_of_birthのテーブルからすべてのレコードを選択したい

lies between 28-Jan and 16-feb
4

3 に答える 3

40

これを試して:

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);

extractmonthday : _

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');
于 2013-01-29T19:22:11.800 に答える
3
select *
from employee
where 
    to_char(date_of_birth, 'MMDD') between 
    to_char(current_date, 'MMDD') and to_char(current_date + 20, 'MMDD')
于 2013-01-29T21:45:14.363 に答える
0

これはうまくいくはずだと思います。を使用し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)

これはおそらく最も効率的ではないため、他の人が過去に使用したものに興味があります。

幸運を。

于 2013-01-29T19:22:08.043 に答える