Вот что я должен работать:
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, и нам нужно, чтобы оно начиналось с нуля.
Вот псевдо-запрос для того, что делает приведенный выше запрос:
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)
Что вы имеете в виду? Пожалуйста, будьте конкретны. – OldProgrammer
@OldProgrammer Например, запуск указанного запроса прямо сейчас вернет все 31 день июля. – GriffeyDog