我正在研究一个简单的PL / SQL块,该块询问用户其出生日期并计算其年龄。我已经使用months_between除以12转换,但是我无法从用户输入的日期转换和日期中输入替换变量。请忽略v_birthday_year,因为这是我稍后要集成的代码的另一部分。
我不确定用户必须输入的格式(例如05-07-1980或1978年3月6日)是否可以接受,以及如何根据输入内容计算年龄。
我想要的程序是编写一个PL / SQL程序以DD-MON-YYYY格式接受用户的生日,并以1个小数位计算年龄。 因此,我也需要将其计算出小数点后一位。
这是我所拥有的,但是我不确定在替代变量输入和实际计算中用小数点后一位在DOB中键入哪种格式。我只是想看看我要去哪里哪里以及如何纠正它。
SET SERVEROUTPUT ON DECLARE --v_birthday_year NUMBER(4) := &v_birthday_year; v_dob DATE := &v_dob v_your_age NUMBER(3, 1); BEGIN v_your_age := TRUNC(MONTHS_BETWEEN(SYSDATE, v_dob))/12; DBMS_OUTPUT.PUT_LINE ('Your age is ' || v_your_age); END; /
除非您正在学习有关PL / SQL的知识,否则从我本人和我那里得到的所有SQL示例都可能是更好的选择。这是我想出的:
DECLARE v_dob DATE:= to_date('&v_dob', 'MM/DD/YYYY'); -- copy this line and you'll be fine v_your_age NUMBER(3, 1); BEGIN v_your_age := TRUNC(MONTHS_BETWEEN(SYSDATE, v_dob))/12; DBMS_OUTPUT.PUT_LINE ('Your age is ' || v_your_age); END; / I passed 01/01/2010. Got this in output: Your age is 3.1
另一个SQL示例:
SELECT empno, ename, hiredate , TRUNC(MONTHS_BETWEEN(sysdate, hiredate)/12) years_of_service FROM scott.emp /