堆叠语法

时间:2019-04-13 03:09:57

标签: sql oracle syntax

这是关于我想根据个人的社会保险号知道数据库中个人的年龄。所以sysdate-他们的出生日期采用合适的格式。想要的结果:约翰,母鹿,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;

1 个答案:

答案 0 :(得分:0)

显然,这是非常近似的结果

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

因此,我们的约翰大约有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>