2012-12-05 47 views
0

我手上有問題。我正在開發一個應用程序,用戶希望將其心願卡發送給其生日在用戶提供的FROM和TO日期內的其客戶,無論年份如何。即搜索結果應僅基於月份和日期。例如我的輸入參數是從日期:「12/05」(12月05日)和截止日期:「01/04」(04年1月)。請幫忙。在此先感謝即將到來的生日oracle列表plsql

回答

0

你應該使用這個查詢條件。如果從現在開始在一個月內,它將選擇birthdate。生日可以來自任何年:

where 
TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1900','DD.MM.YYYY') , 
between 
TO_DATE(TO_CHAR(sysdate,'dd.mm')||'.1900','DD.MM.YYYY') 
and ADD_MONTHS(TO_DATE(TO_CHAR(sysdate,'dd.mm')||'.1900','DD.MM.YYYY'),1) 

如果用戶輸入的日期範圍,例如'02/03' 和'23/06' (‘P1’和在此查詢‘P2’),然後使用以下條件。

where 
(
TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1900','DD.MM.YYYY') , 
between 
TO_DATE('P1'||'.1900','DD.MM.YYYY') 
and 
TO_DATE('P2'||'.1900','DD.MM.YYYY') 
) 

OR 
(
    (TO_DATE('P1'||'.1900','DD.MM.YYYY') 
     > TO_DATE('P2'||'.1900','DD.MM.YYYY')) 
    and 

    (
    TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1900','DD.MM.YYYY') , 
    between 
    TO_DATE('P1'||'.1900','DD.MM.YYYY') 
    and 
    TO_DATE('31.12.1900','DD.MM.YYYY') 
    OR 
    TO_DATE(TO_CHAR(birthdate,'dd.mm')||'.1901','DD.MM.YYYY') , 
    between 
    TO_DATE('01.01.1901','DD.MM.YYYY') 
    and 
    TO_DATE('P2'||'.1901','DD.MM.YYYY') 


    ) 

) 
+0

VALEX感謝您的時間。其實問題是它的用戶輸入日期範圍。並且用戶可以輸入「MM/DD」格式的兩個日期的任何標準 – bilal

+0

查詢已更改 – valex

+0

感謝您更新的查詢,並且在使用此查詢之後,我的問題幾乎可以解決,除了一種情況。現在的問題是,如果用戶輸入的日期小於FROM日期,那麼應用程序正在返回incorect結果。例如,如果用戶在此情況下輸入標準FROM date:12/04和TO date:01/03(即他希望查看從12月4日到03年1月的結果),則查詢未返回正確結果 – bilal

0

假設您已經將DOB存儲爲DATE讓表格PPL中的column =「DOB」。

即對於原載:

FIRSTNAME      LASTNAME       DOB 
-------------------------------- -------------------------------- --------- 
Joe        Bloggs       03-JAN-90 
Jane        Doe        05-JAN-40 
Adam        West        05-DEC-76 

我們得到

SQL> select firstname, lastname, dob, next_bday 
2 from (select firstname, lastname, dob, 
3     case when to_date(to_char(dob, 'mmdd'), 'mmdd') < trunc(sysdate) 
4     then add_months(to_date(to_char(dob, 'mmdd'), 'mmdd'), 12) 
5     else to_date(to_char(dob, 'mmdd'), 'mmdd') 
6     end next_bday 
7   from ppl) 
8 where next_bday < add_months(trunc(sysdate), 1); 

FIRS LASTNA DOB  NEXT_BDAY 
---- ------ --------- --------- 
Joe Bloggs 03-JAN-90 03-JAN-13 
Adam West 05-DEC-76 05-DEC-12