簡體   English   中英

如何使用Oracle SQL獲取sysdate月份中的所有日期?

[英]How do I get all dates from sysdate's month with Oracle SQL?

我嘗試獲取不帶參數的查詢,以獲取當前月份的日期列表。

像這樣:

SYSDATE = 16/07/15

我想要下一個列表:

15年1月7日
15年2月7日
...
30/07/15
31/07/15

選擇當前月份的所有日期

SELECT  TO_CHAR (TRUNC (SYSDATE, 'MM'), 'YYYYMMDD')+(LEVEL - 1) each_date
FROM    DUAL a
CONNECT BY LEVEL < (TO_NUMBER (TO_CHAR (TRUNC (SYSDATE, 'MM') - 1, 'DD'))+1)

這是我要工作的內容:

SELECT TRUNC(SYSDATE, 'MM') + LEVEL - 1 AS day
FROM dual
CONNECT BY TRUNC(TRUNC(SYSDATE, 'MM') + LEVEL - 1, 'MM') = TRUNC(SYSDATE, 'MM')
;

此查詢中的關鍵字是TRUNC(SYSDATE, 'MONTH') ,它是當前月份的第一天。
我們使用分層查詢將一天中的第一天增加一天,直到該值不再是當前月份。
我們使用LEVEL - 1因為LEVEL從1開始,我們需要從0開始。

這是上述查詢的偽查詢:

SELECT (start_of_month + days) AS day
FROM dual
WHILE MONTH_OF(start_of_month + days) = current_month

這個查詢有點容易理解:

SELECT *
FROM
(
    SELECT TRUNC(SYSDATE, 'MM') + LEVEL - 1 AS day
    FROM dual
    CONNECT BY LEVEL <= 32
)
WHERE EXTRACT(MONTH FROM day) = EXTRACT(MONTH FROM SYSDATE)

這應該工作:

    select trunc(sysdate, 'MONTH') + rownum - 1
      from dual
connect by rownum <= to_number(to_char(last_day(sysdate), 'DD'));

這是使用connect by的技巧。 我在月份級別截斷日期,將其有效地設置為該月的第一天,為每個“級別”添加一天,然后過濾該月份以外發生的任何一天。

select day_of_month
from
(select (level - 1) + trunc(to_date('07/16/2015','MM/DD/YYYY'),'MM') day_of_month
from
dual
connect by level <= 31)
where day_of_month < add_months(trunc(to_date('07/16/2015','MM/DD/YYYY'),'MM'),1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM