如何在一年中的某个月找到该月的周数?

时间:2014-08-15 23:56:02

标签: postgresql datetime postgresql-9.3

鉴于我有'YYYY-MM'格式的月份和年份,如何找到该月的周数?

e.g。 2014-07有5个星期。

我认为这个想法是找到该月的最后一个日期,然后找到该日期的那个月。如果我输入正确的日期,以下工作,但我不知道如何重建日期/时间戳,因为我的起点是YYYY-MM。

SELECT TO_CHAR(DATE_TRUNC('month', timestamp '2014-07-31') 
    + INTERVAL '1 month' - INTERVAL '1 day', 'w' ) 

谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,你需要定义“周”。是一个日历周,部分在一个月内是“一周”吗?你想要完整的7天时间吗?什么?星期日或星期一开始几周?

你想要ISO weeks吗?几周根据当地的一些金融规则?别的什么?

在解决问题之前,您必须明确定义问题。通常只是定义它可以帮助您解决它。


根据格式为d的日期YYYY-MM和数据类型text,这将构成该月的第一天:

to_date(d, 'YYYY-MM');

然后到最后一天,找到下个月并减去一天:

(to_date(d, 'YYYY-MM') + INTERVAL '1' MONTH) - INTERVAL '1' DAY

e.g。

regress=> SELECT (to_date('2014-07', 'YYYY-MM') + INTERVAL '1' MONTH) - INTERVAL '1' DAY;
      ?column?       
---------------------
 2014-07-31 00:00:00
(1 row)

从那里,您可以根据适合您的应用的定义执行所需的工作,例如:

regress=> SELECT extract(week from (to_date('2014-07', 'YYYY-MM') + INTERVAL '1' MONTH) - INTERVAL '1' DAY) - extract(week from to_date('2014-07', 'YYYY-MM'));
 ?column? 
----------
        4
(1 row)

根据“周数”的一个定义。