0

我有一个查询返回 01/01/2011 和 12/31/2041 之间的所有日期(不包括周六和周日)。它工作正常,但是当我尝试将过滤器“TRIM(TO_CHAR(dt,'DAY'))不在('SATURDAY','SUNDAY')”中时,它只返回一行。有什么建议么?请记住,我是 PostgreSQL 的新手。

   WITH RECURSIVE bd(dt,rn) AS 
    (
     SELECT
           TO_DATE('01/01/2011', 'MM/DD/YYYY') AS dt,
           1 AS rn
     UNION
     SELECT
          dt + 1, rn + 1
     FROM
          bd
     WHERE
          dt BETWEEN TO_DATE('01/01/2011', 'MM/DD/YYYY') AND TO_DATE('12/31/2041', 'MM/DD/YYYY') - 1  
    )
    SELECT
         dt, rn
    FROM
         bd
    WHERE TRIM(TO_CHAR(dt, 'DAY')) NOT IN ('SATURDAY', 'SUNDAY')
4

1 回答 1

0

不需要递归查询。这可以更容易地使用generate_series()

select t.dt::date
from generate_series(date '2011-01-01', date '2014-12-31', interval '1 day') as t(dt)
where extract(isodow from t.dt) not in (6,7);
于 2019-11-08T15:19:05.390 回答