PL SQL l oop через даты и использовать его в качестве параметра - PullRequest
0 голосов
/ 20 февраля 2020

Поэтому я пытаюсь найти правильный метод для использования каждой даты из запроса ниже, чтобы использовать ее в качестве параметра для другого запроса

SELECT to_char(dates,'yyyy-mm-dd') dates
FROM (
    SELECT TO_DATE('01-JAN-2019') + ROWNUM - 1 dates
        FROM (
          SELECT ROWNUM FROM (
            SELECT 1 FROM DUAL
            CONNECT BY LEVEL <= sysdate - (TO_DATE('01-JAN-2019') + 1 )
          )
    )
)

EX. выберите netca sh из tb1, где tb1.cutoff_date =: даты (где значение для: даты берется из подзапроса)

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Неясно, что вы ищете здесь, но в вашем примере это может выглядеть так:

SELECT NETCASH FROM TB1 WHERE to_char(tb1.CUTOFFDATE,'yyyy-mm-dd') IN (
SELECT to_char(dates,'yyyy-mm-dd') dates
FROM (
    SELECT TO_DATE('01-JAN-2019') + ROWNUM - 1 dates
        FROM (
          SELECT ROWNUM FROM (
            SELECT 1 FROM DUAL
            CONNECT BY LEVEL <= sysdate - (TO_DATE('01-JAN-2019') + 1 )
          )
    )
);

Хотя лично, если CUTOFFDATE не является строкой в ​​этом формате, я бы просто удалил оба TO_CHAR, если вам нужна полночь, вы можете использовать TRUN C (дата).

Вы также можете сделать это:

SELECT NETCASH 
FROM TB1 
INNER JOIN (
    SELECT to_char(dates,'yyyy-mm-dd') dates
    FROM (
        SELECT TO_DATE('01-JAN-2019') + ROWNUM - 1 dates
            FROM (
              SELECT ROWNUM FROM (
                SELECT 1 FROM DUAL
                CONNECT BY LEVEL <= sysdate - (TO_DATE('01-JAN-2019') + 1 )
              )
        )
    )) as DATES
    ON dates.dates = to_char(tb1.CUTOFFDATE,'yyyy-mm-dd')
;

Но эти два запроса дадут очень разные результаты, используйте тот, который соответствует вашим намерениям.

0 голосов
/ 20 февраля 2020

Используйте общее табличное выражение (CTE) и присоединитесь к нему, как к обычной таблице (надеюсь, TO_CHAR () не требуется, а tb1.cutoff_date - это тип данных даты):

WITH date_tbl(dates) AS (
  SELECT TO_CHAR(TO_DATE('01-JAN-2019')+LEVEL-1, 'yyyy-mm-dd')  
  FROM dual
  CONNECT BY LEVEL <= SYSDATE - (TO_DATE('01-JAN-2019') + 1 )
)
SELECT netcash 
FROM tb1 
  JOIN date_tbl
    ON tb1.cutoff_date = date_tbl.dates;
...