PL/SQL 程序来计算年龄以及你的生日年份是不是是闰年[关闭]
Posted
技术标签:
【中文标题】PL/SQL 程序来计算年龄以及你的生日年份是不是是闰年[关闭]【英文标题】:PL/SQL Program to calculate age and whether your birthday year is a leap year or not [closed]PL/SQL 程序来计算年龄以及你的生日年份是否是闰年[关闭] 【发布时间】:2013-02-06 10:02:48 【问题描述】:所以这个问题似乎在编程课上以各种形式被问到。我已经看到这个问题涉及触发器、函数等。我已经计算了程序的闰年部分,并且有几种不同的方法可以从你的生日计算年龄,无论是除以 365.25 还是间隔几个月,可能还有其他几种方法来解决这个问题。
我只是在年龄计算方面遇到了一些问题,并且在其他程序中执行此操作并专门在 PL/SQL for Oracle Dev 中对此进行编程时,我得到了信息过载。
这个展示了它是如何在 SQL SERVER 中完成的:calculating age from sysdate and birthdate using SQL Server
这个使用触发器,它与我正在寻找的相似但不完全一样。 Calculating age from birthday with oracle plsql trigger and insert the age in table
编写一个 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) 现在很好用。
【问题讨论】:
那么您的实际问题是什么? 只需评论TO_CHAR(SYSDATE, 'DD-MM-YYYY')
行。
你有什么问题?
感谢您的帮助,我在日期转换和计算方面遇到了问题。我将注释放在我遇到问题的代码中,只是想要一些关于如何最好地解决这个问题的指导。具体来说,当教授在每个编程课上都问这个问题时,就会出现信息过载。但是,如果我可以将它结合到我的编码中,这可能是最好的提示。我只是在回顾我的思路并发布此内容以帮助他人。 ***.com/questions/3015431/…
是的,我不知道为什么我把 TO_CHAR(SYSDATE, 'DD-MM-YYYY') 放在那里,我只是在编写可能有用的代码,我遇到了问题变量声明为 NUMBER,但我看到的计算年龄的示例使用 DATE 变量,所以这让我很失望。
【参考方案1】:
您也可以尝试通过转换为儒略日期来检查它。当您将时间戳转换为儒略日期时,您将获得自公元前 -4000 年之前某个日期以来的天数。如果您计算两个日期之间的差异,您就会知道这些日期之间的天数。所以在你出生年份的 1 月 1 日和 12 月 31 日这样做,你就会知道它是否是闰年。
要计算年龄,请检查函数months_between
(检查this question 的最后答案)。
【讨论】:
我想通了。现在工作得很好。 @MeachamRob,你能把你想出的代码放出来让其他人看到吗?以上是关于PL/SQL 程序来计算年龄以及你的生日年份是不是是闰年[关闭]的主要内容,如果未能解决你的问题,请参考以下文章