postgresql – 如何计算Postgres中两个日期之间的星期日以外的天
要查找两个日期之间的天数,我们可以使用以下内容:
SELECT date_part('day',age('2017-01-31','2017-01-01')) as total_days; 在上面的查询中,我们得到30作为输出而不是31.为什么? Total Days = 31 Total Days except Sundays = 26
您需要更密切地定义“两个日期之间”.包括或排除下限和上限?通常的定义是包括较低的并排除间隔的上限.另外,当下限和上限相同时,将结果定义为0.这个定义恰好与日期减法一致.
SELECT date '2017-01-31' - date '2017-01-01' AS days_between 这个确切的定义对于排除星期日非常重要.对于给定的定义,Sun – Sun(1周后)的间隔不包括上限,因此只有1个星期日要减去. interval in days | sundays 0 | 0 1-6 | 0 or 1 7 | 1 8-13 | 1 or 2 14 | 2 ... 7天的间隔总是包括一个星期天. 我们可以使用普通整数除法(天/ 7)得到最小结果,这会截断结果. 剩余1至6天的额外星期日取决于间隔的第一天.如果是星期天,宾果游戏;如果是星期一,太糟糕了.等等.我们可以从中得出一个简单的公式: SELECT days,sundays,days - sundays AS days_without_sundays FROM ( SELECT z - a AS days,((z - a) + EXTRACT(isodow FROM a)::int - 1 ) / 7 AS sundays FROM (SELECT date '2017-01-02' AS a -- your interval here,date '2017-01-30' AS z) tbl ) sub; 适用于任何给定的间隔. 要包含上限,只需将z – a替换为(z – a)1.(由于运算符优先级,可以不使用括号,但最好清楚.) 性能特征是O(1)(常数),而不是具有O(N)的生成集合上的条件聚合. 有关: > How do I determine the last day of the previous month using PostgreSQL? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |