2015-12-07 260 views
0

我想搜索今天的日期和今年的指定月份之間的記錄。如果我想在不改變查詢的情況下在明年執行相同的查詢,那麼該月必須基於sysdate我認爲?無論如何,這正是我想要實現的目標。這裏是我的查詢:在今天的日期和今年的指定月份之間搜索記錄

感謝

+0

我不明白這個問題。 「指定月份」與當前日期有什麼關係?例如,你想要在兩個月前和今天午夜之間的月份的第一個月之間搜索行嗎? –

+0

對不起,基本上這一年必須從sysdate – BigAl1992

+0

仍然沒有關注。在你的問題中,你有謂詞'BETWEEN '01 -OCT-15'和to_char(sysdate,'dd-mon-yy')'。我認爲這就是我們正在談論的。我的猜測是,您正試圖想出一種方法來根據當前日期計算2015年10月1日午夜的日期。這就是爲什麼我問你算法是什麼。你想在2個月前的這個月的第一個月?本季度的第一個?還有別的嗎? –

回答

-1

試試這個:

SELECT * 
FROM details n 
WHERE n.id (SELECT p.nhno 
      FROM patient p 
      WHERE p.fname = 'James' 
      AND p.surname = 'Gump' 
      AND p.nhno = n.nhno 
      AND n.daterecorded 
      BETWEEN TO_DATE('01-OCT-'||(SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL),'DD-MON-YY') 
       AND TO_DATE(SYSDATE,'DD-MON-YY'); 
+1

''01 -OCT-2015''是一個字符串,不是日期 - 唯一的辦法就是如果將NLS_DATE_FORMAT設置爲DD-MON-YYYY,但是如果它不是或者它被改變那麼它將無法工作。 – MT0

+0

除了NLS問題之外,這似乎不太可能是個人想要的。如果在給定年份的10月1日之前的任何時候運行此操作,則不會得到任何結果(假設您的NLS設置允許查詢運行)。這似乎不太可能是預期的結果 –

+0

謝謝,對不起,我沒有測試它。我已經修復並測試了它,按預期工作。如果你喜歡它,請豎起大拇指。 – user3224907

0

什麼ü上面推斷是不正確的。你已經給出了'01 -oct-15'的日期,並且你想運行相同的查詢而不改變下一年的日期 。你認爲結果會是什麼? U將會從'01 -oct-15'獲得記錄,每年你都會在同一年中運行不是特定月份的查詢!

正如你上面所說的,你似乎只需要在同一年的指定月份的記錄,但每年都不需要相同的'01 -oct-15'。

如果U之間需要2個月(前)和TODAY,使用下面查詢記錄,

SELECT * 
    FROM details n 
WHERE EXISTS (SELECT p.nhno 
       FROM patient p 
       WHERE p.fname = 'James' 
        AND p.surname = 'Gump' 
        AND p.nhno = n.nhno 
        AND p.daterecorded BETWEEN ADD_MONTHS(SYSDATE, -2) AND TO_CHAR(SYSDATE, 'dd-mon-yy')); 

如果U之間需要2個月(後),TODAY紀錄,更換BETWEEN STATEMENT在上面的查詢WITH ,

'BETWEEN ADD_MONTHS(SYSDATE, 2) AND TO_CHAR(SYSDATE, 'dd-mon-yy'))' 

U還可以在'add_months'中將此查詢更改爲您需要的指定月份。 說,如果u要6個月(前)和當前日期之間的記錄,

'BETWEEN ADD_MONTHS(SYSDATE, -6) AND TO_CHAR(SYSDATE, 'dd-mon-yy'))' 

U可以每年都沒有任何改變運行此查詢。

這應該做到這一點。如果沒有,請回到我身邊。

相關問題