PostgreSQL(带递归)

PostgreSQL(带递归),postgresql,Postgresql,我有一个查询,返回2011年1月1日至2041年12月31日之间的所有日期(不包括周六和周日)。它工作得很好,但是当我尝试将过滤器“TRIM(to_CHAR(dt,'DAY'))而不是('SATURDAY','SUNDAY')”放在WITH中时,它只返回一行。有什么建议吗?请记住,我是PostgreSQL的新手 WITH RECURSIVE bd(dt,rn) AS ( SELECT TO_DATE('01/01/2011', 'MM/DD/YYY

我有一个查询,返回2011年1月1日至2041年12月31日之间的所有日期(不包括周六和周日)。它工作得很好,但是当我尝试将过滤器“TRIM(to_CHAR(dt,'DAY'))而不是('SATURDAY','SUNDAY')”放在WITH中时,它只返回一行。有什么建议吗?请记住,我是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')

不需要递归查询。使用
generate_series()


你的查询对我来说很好:但是你能告诉我t(dt)是做什么的吗?我假设它是一个别名。@edavis是的,它是generate_系列的别名。@edavis:谢谢。我对dt“t(dt)”周围的括号很好奇,我从来没有见过这样的别名。
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);