当月的当前周数

时间:2013-08-23 09:41:07

标签: sql postgresql

我使用以下查询来获取当前的一周

select extract(week from current_timestamp)它显示34很好。

但我如何获得当月的当前周数。

6 个答案:

答案 0 :(得分:17)

您可以通过以下方式找到本周的第一天:

trunc('week', current_date)

本月第一周的第一天:

trunc('week', date_trunc('month', current_date))

减去两个以找到月中的周数:

extract('day' from date_trunc('week', current_date) -
                   date_trunc('week', date_trunc('month', current_date))) / 7 + 1

答案 1 :(得分:4)

尝试以下

SELECT to_char('2016-05-01'::timestamp, 'W');

答案 2 :(得分:1)

您可以使用日期查找周数:

select ((date_part('day', current_date)::integer - 1) / 7) +1;

答案 3 :(得分:0)

我不确定这对postgreSql(http://www.w3cyberlearnings.com/PostgreSQL_DATE_PART)的工作原理如何 但在sql server中,这个例子是这样的......

>SELECT date_part('week', date)

答案 4 :(得分:0)

这将给出准确的结果

CREATE OR REPLACE FUNCTION week_no(date) RETURNS integer AS $BODY$ SELECT CASE WHEN EXTRACT(DAY FROM $1::TIMESTAMP)::INTEGER = 1 THEN 1 ELSE extract(week from $1:: TIMESTAMP)::integer
- extract(week from ( date_trunc('month', $1::TIMESTAMP) + interval '1 day' ) )::integer + 1 END
$BODY$ LANGUAGE sql IMMUTABLE STRICT COST 100;

示例: week_no(' 2017-01-01')= 1

答案 5 :(得分:0)

也许迟到..但这也有效

其中cast(call_start as Date)= Date'Woday'

或施放(call_start作为日期)=日期'今天'-1

或施放(call_start作为日期)=日期'今天'-2

或施放(call_start作为日期)=日期'今天'-3

或施放(call_start作为日期)=日期'今天'-4

或施放(call_start作为日期)=日期'今天'-5

或施放(call_start作为日期)=日期'今天'-6

或强制转换(call_start as Date)=日期'今天'-7

这给了我