[英]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.