鉴于我有'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' )
谢谢!
答案 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)
根据“周数”的一个定义。