PLSQL循环日期并将其用作参数



因此,我正试图找到一种正确的方法,将下面查询中的每个日期用作另一个查询的参数

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 )
)
)
)

前任。从tb1中选择netcash,其中tb1.cutoff_date=:dates(其中:dates的值来自子查询(

使用公共表表达式(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;

这里不清楚您在寻找什么,但在您的示例中可能是这样的:

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,如果你需要午夜,你可以使用TRUNC(日期(。

你也可以这样做:

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')
;

但这两个查询将产生非常不同的结果,请使用与您的意图相匹配的查询。

最新更新