小编典典

Oracle PL / SQL,如何使用简单的替换变量和months_between计算从出生日期开始的年龄

sql

我正在研究一个简单的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;
/

阅读 185

收藏
2021-05-23

共1个答案

小编典典

除非您正在学习有关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
/
2021-05-23