所以这个问题似乎在编程课上以各种形式被问到。我已经看到这个问题涉及触发器、函数等。我已经计算了程序的闰年部分,并且有几种不同的方法可以从你的生日计算年龄,无论是除以 365.25 还是间隔月数,可能还有其他几种方法来解决这个问题。
我只是在计算年龄时遇到了一些问题,并且在其他程序中执行此操作并专门在 PL/SQL 中为 Oracle Dev 进行编程时,信息过载。
这个展示了它是如何在 SQL SERVER 中完成的: 使用 SQL Server 从 sysdate 和birthdate 计算年龄
这个使用触发器,它与我正在寻找的相似但不完全一样。 使用oracle plsql触发器从生日计算年龄并将年龄插入表中
编写一个 PL/SQL 块来接受你的生日。计算并打印您的年龄(包括小数点后一位)。还要检查您的出生年份是否是闰年。打印一条消息,例如“我的出生年份是闰年”。或“我的出生年份不是闰年。” 提示:要确定闰年,年份应该能被 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 转换,birthyear、dob 和 age 的单独变量。年龄计算到小数点后 1 位。Trunc(x, 1) 现在很好用。