首页 > 解决方案 > 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 )
          )
    )
)

前任。select netcash from tb1 where tb1.cutoff_date = :dates (其中 :dates 的值来自子查询)

标签: oracleplsqlparameters

解决方案


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

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(date)。

你也可以这样做:

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

但是这两个查询会产生非常不同的结果,请使用符合您意图的查询。


推荐阅读