7

年の正しい週番号を取得する関数を作成したいと考えています。「ネイティブ」ソリューションを見つけるためにここに投稿しましたが、明らかにそうではありません。

このmysqlの例に基づいて関数を作成しようとしました

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

4

4 に答える 4

6
create or replace function week_num_year(_date date)
returns integer as
$body$
declare
_year date;
_week_number integer;
begin
select date_trunc('year', _date)::date into _year
;
with first_friday as (
    select extract(doy from a::date) ff
    from generate_series(_year, _year + 6, '1 day') s(a)
    where extract(dow from a) = 5
)
select floor(
        (extract(doy from _date) - (select ff from first_friday) - 1) / 7
    ) + 2 into _week_number
;
return _week_number
;
end;
$body$
language plpgsql immutable
于 2013-02-13T16:41:28.580 に答える
2

次のコマンドを実行して、曜日と年間通算週を取得できます。

   select  id,extract(DOW from test_date),extract(week from test_date), testdate,name from yourtable
于 2017-09-06T13:14:08.763 に答える
1

インビルド抽出機能はどうですか?

SELECT extract (week from current_timestamp) FROM A_TABLE_FROM_YOUR_DB;
于 2013-02-13T15:17:08.423 に答える