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