2017-07-05 9 views
0

pgsqlで日付の期間を月単位で取得するにはどうすればよいですか?私は日付期間の月の範囲で値を分割する必要があります。同様2016年1月31日2016年3月31日2ヶ月の期間のを持っていると私は2によって値を分割する必要があります。私は、pgSQLストアドプロシージャのパラメータとして2つの日付を送信しています。ここでpgSQLで日付のピリオドを整数で取得する方法

答えて

1

は数ヶ月の期間リターン整数

CREATE OR REPLACE FUNCTION date_period(start_date varchar,end_date varchar) RETURNS integer AS $LABEL$ 
DECLARE 
v_result integer; 
BEGIN 

select into v_result date_part('months',end_date::date)- date_part('months',start_date::date) as date_period; 

/* v_result is integer */ 
RETURN (v_result); 

/* COMMENTS THIS IF YOU IN DEBUG MODE */ 
EXCEPTION WHEN OTHERS THEN RETURN (999); 

END; 
$LABEL$ LANGUAGE plpgsql 
SECURITY DEFINER; 

EXECによる関数日付期間です:SELECT * date_period( '2016年1月31日'、 '2016年5月31日')FROM;この機能を使用することができますDIFFERENT年の

CREATE OR REPLACE FUNCTION date_period(start_date varchar,end_date varchar) RETURNS integer AS $LABEL$ 
DECLARE 
v_result integer; 
BEGIN 

select into v_result ((extract(epoch from end_date::date)-extract(epoch from start_date::date))/60/60/24/30)::integer as date_period; 

/* v_result is integer */ 
RETURN (v_result); 

/* COMMENTS THIS IF YOU IN DEBUG MODE */ 
EXCEPTION WHEN OTHERS THEN RETURN (999); 

END; 
$LABEL$ LANGUAGE plpgsql 
SECURITY DEFINER; 

EXEC:date_period( '2016年1月31日'、 '2017年3月31日')SELECT * FROM。

+0

どのようにその変数を使用しますか? 'sum(column_name)/ variable'と書くと、" column "というピリオドが存在しないというエラーが表示されます。 –

+0

これは動作します。私にはタイプミスがありました。ありがとう:) –

+1

こんにちは。少し問題があります。私の日付が「2016/01/31」と「2017/03/31」の場合それは14ヶ月ではなく2ヶ月を示しています。それで私を助けてください。 –

関連する問題