因此,我正试图找到一种正确的方法,将下面查询中的每个日期用作另一个查询的参数
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')
;
但这两个查询将产生非常不同的结果,请使用与您的意图相匹配的查询。