0

したがって、この質問はプログラミングクラスでさまざまな形で尋ねられるようです。私はこれがトリガーや関数などで尋ねられるのを見てきました。プログラムのうるう年の部分を計算しました。誕生日から年齢を計算する方法はいくつかあります。365.25で割るか、月の間隔で割るか、おそらくこれを最善の方法で行うには他のいくつかの方法があります。

Ageの計算に問題があり、他のプログラムでこれを実行し、特にPL / SQL for Oracle Devでこれをプログラミングすると、情報が過負荷になります。

これは、SQL SERVERでどのように行われるかを示しています 。SQLServerを使用して、sysdateとbirthdateから年齢を計算します。

これはトリガーを使用しており、似ていますが、私が探しているものとはまったく異なります。 oracle plsqlトリガーを使用して誕生日から年齢を計算し、年齢を表に挿入します

誕生日を受け入れるためのPL/SQLブロックを記述します。年齢を小数点以下1桁を含む年数で計算して印刷します。また、誕生年がうるう年かどうかも確認します。「私の誕生年はうるう年です」のようなメッセージを印刷します。または「私の誕生年はうるう年ではありません。」ヒント:うるう年を決定するには、年を4で正確に割り切れるが、100で割り切れないようにするか、400で割り切れる必要があります。

SET SERVEROUTPUT ON
DECLARE
   v_birthday_year        NUMBER(4)    := &v_birthday_year;
   v_your_age             NUMBER(4, 1);
   v_leap_remainder1      NUMBER(5, 2);
   v_leap_remainder2      NUMBER(5, 2);
   v_leap_remainder3      NUMBER(5, 2);

 BEGIN
   v_leap_remainder1 := MOD(v_birthday_year, 4);
   v_leap_remainder2 := MOD(v_birthday_year, 100);
   v_leap_remainder3 := MOD(v_birthday_year, 400);

 IF ((v_leap_remainder1 = 0 AND v_leap_remainder2 <> 0 ) 
     OR v_leap_remainder3 = 0) 
 THEN
   DBMS_OUTPUT.PUT_LINE(v_birthday_year || ' is a leap year');

 ELSE
   DBMS_OUTPUT.PUT_LINE (v_birthday_year || ' is not a leap
   year');

  END IF;


  TO_CHAR(SYSDATE, 'DD-MM-YYYY')
  v_your_age := (MONTHS_BETWEEN(TRUNC(SYSDATE), v_birthday_year)/12);
  DBMS_OUTPUT.PUT_LINE ('Your age is ' || v_your_age);

 END;
 /

実際、私はそれを理解しました。これは、生年月日、生年月日、生年月日、および年齢の個別の変数である、dobのto_date変換でした。年齢は小数点以下1桁まで計算されます。Trunc(x、1)これでうまく機能します。

4

1 に答える 1

1

ジュリアンの日付への変換で確認することもできます。タイムスタンプをユリウス日に変換すると、紀元前-4000年より前のある日付からの日数が得られます。2つの日付の差を計算すると、それらの日付間の日数がわかります。ですから、あなたの誕生年の1月1日と12月31日にそれを行うと、うるう年であったかどうかがわかります。

年齢を計算するには、関数を確認します(この質問months_betweenの最後の回答を確認してください)。

于 2013-02-06T10:27:38.483 に答える