我想搜索今天的日期和今年的指定月份之間的記錄。如果我想在不改變查詢的情況下在明年執行相同的查詢,那麼該月必須基於sysdate我認爲?無論如何,這正是我想要實現的目標。這裏是我的查詢:在今天的日期和今年的指定月份之間搜索記錄
感謝
我想搜索今天的日期和今年的指定月份之間的記錄。如果我想在不改變查詢的情況下在明年執行相同的查詢,那麼該月必須基於sysdate我認爲?無論如何,這正是我想要實現的目標。這裏是我的查詢:在今天的日期和今年的指定月份之間搜索記錄
感謝
試試這個:
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');
''01 -OCT-2015''是一個字符串,不是日期 - 唯一的辦法就是如果將NLS_DATE_FORMAT設置爲DD-MON-YYYY,但是如果它不是或者它被改變那麼它將無法工作。 – MT0
除了NLS問題之外,這似乎不太可能是個人想要的。如果在給定年份的10月1日之前的任何時候運行此操作,則不會得到任何結果(假設您的NLS設置允許查詢運行)。這似乎不太可能是預期的結果 –
謝謝,對不起,我沒有測試它。我已經修復並測試了它,按預期工作。如果你喜歡它,請豎起大拇指。 – user3224907
什麼ü上面推斷是不正確的。你已經給出了'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可以每年都沒有任何改變運行此查詢。
這應該做到這一點。如果沒有,請回到我身邊。
我不明白這個問題。 「指定月份」與當前日期有什麼關係?例如,你想要在兩個月前和今天午夜之間的月份的第一個月之間搜索行嗎? –
對不起,基本上這一年必須從sysdate – BigAl1992
仍然沒有關注。在你的問題中,你有謂詞'BETWEEN '01 -OCT-15'和to_char(sysdate,'dd-mon-yy')'。我認爲這就是我們正在談論的。我的猜測是,您正試圖想出一種方法來根據當前日期計算2015年10月1日午夜的日期。這就是爲什麼我問你算法是什麼。你想在2個月前的這個月的第一個月?本季度的第一個?還有別的嗎? –