堆叠语法

问题描述 投票:0回答:1

这是关于我想根据他们的社会安全号码知道数据库中个人的年龄。所以sysdate - 他们的出生日期是适合的格式。想要的结果:John,Doe,45,6年。表数据:

表:

pnr VARCHAR2(13) value'19790343-7899'

我一定错过了一些明显的东西。这是我到目前为止的代码:(包括一些测试代码)

关于约会的一切

- 完整代码,尝试如下 -

declare 
 cursor c_åldrar is 
 select fnamn,enamn,(sysdate - to_date(substr(pnr,1,6),'yyyymm')) / 365 
   from bilägare;

begin 
   for rec in c_åldrar 
   loop 
     dbms_output.put_line(rec.fnamn||', '||rec.enamn||', '||rec.pnr||', '||sysdate); 
   end loop; 
end; 
/

-- Attempt 1 
   select fnamn,enamn,sysdate - to_date(substr(pnr,1,6),'yyyymm') 
     from bilägare;

-- Attempt 2 
    select fnamn,enamn,(sysdate - to_date(substr(pnr,1,6),'yyyymm')) / 365 
      from bilägare;
sql oracle syntax
1个回答
0
投票

这显然是非常近似的结果

  • 你不知道准确的出生日期(年和月是,但是一天?)
  • 年没有365年;闰年怎么样?

因此,我们约翰约有40年。约翰生日快乐。

SQL> with bilagare (fnamn, enamn, pnr) as
  2    (Select 'John', 'Doe', '19790343-7899' from dual)
  3  select fnamn,
  4         enamn,
  5         round((trunc(sysdate) - to_date(substr(pnr, 1, 6), 'yyyymm')) / 365, 1) yrs
  6  from bilagare;

FNAM ENA        YRS
---- --- ----------
John Doe       40,1

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.