postgresql - 功能获取一年中正确的周数

标签 postgresql postgresql-9.2 week-number

我想创建一个函数来获取一年中正确的周数。 我已经发布了here找到“本地”解决方案,但显然没有。

我尝试基于此 mysql example 创建函数

这是翻译成 postgresql 的代码:

CREATE OR REPLACE FUNCTION week_num_year(_date date)    
RETURNS integer AS
$BODY$declare 
_year integer;
begin


select date_part('year',_date) into _year; 
return ceil((to_char(_date,'DDD')::integer+(to_char(('01-01-'||_year)::date,'D')::integer%7-7))/7);           


end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

但是它给出了错误的结果,有人可以帮助我吗?

我的配置:PostgreSQL 9.2

最佳答案

如果您想要正确的周数,请使用:

select extract(week from '2012-01-01'::date);

这将产生结果 52,如果您查看日历,这是正确的。

现在,如果您真的想将周数定义为“从一年的第一天开始每 7 天”,那很好,尽管它与其他人使用的周数不匹配并且有一些奇怪的怪癖:

select floor((extract(doy from '2011-01-01'::date)-1)/7)+1;

顺便说一句,解析日期字符串并用字符串函数破解它们几乎总是一个非常糟糕的主意。

关于postgresql - 功能获取一年中正确的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856412/

相关文章:

c# - 如何获取给定年份的周数

postgresql - 如何将 Pgadmin3 连接到 Virtualbox 机器上的数据库?

postgresql - 本地 vs Heroku Postgres 速度

postgresql - 无法执行uuid_generate_v5

vb.net - PostgreSQL:VB.NET ODBC 更新无法正常工作

javascript - 使用javascript检测每个月的最后一周

python - 在 sqlalchemy 中使用 postgresql xml 数据类型

postgresql - 如何在 postgresql 中自动增加字母数字值?

postgresql - 从函数返回的自定义类型的意外行为

PostgreSQL 自定义周数 - 包含 2 月 1 日的第一周