查询岁月

时间:2017-07-15 15:05:44

标签: sql oracle oracle11g date-arithmetic

我会解决此查询

  

显示所有" LASER"的ID,日期和时间。仅涉及的干预措施   医生不到30年。

但我有一个错误:

  

选择i.id,i.data_e_ora

     

来自persona p join medico m

     

on p.cf = m.cf

     

加入effettua e

     

on m.cf = e.cf_med

     

加入intervento i

     

on e.id_int = i.id

     

其中i.tipo =' LASER'和p.data_nascita =((sysdate-p.data_nascita)/ 365)< 30

ERROR at line 9:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER

表:

 CF                                        NOT NULL CHAR(16)
 NOME                                               VARCHAR2(30)
 COGNOME                                            VARCHAR2(30)
 DATA_NASCITA                                       DATE
 SESSO                                              CHAR(1)

1 个答案:

答案 0 :(得分:0)

您只需修复where子句即可。这是过于雄心勃勃的:

select i.id, i.data_e_ora
from persona p join
     medico m
     on p.cf = m.cf join
     effettua e
     on m.cf = e.cf_med join
     intervento i
     on e.id_int = i.id
where i.tipo = 'LASER' and
      p.data_nascita > (sysdate - 365.25 * 30);

注意:减去年数的更好方法是实际减去年数:

where p.data_nascita > sysdate - interval '30' year