2015-10-27 136 views
0

所以我下表對我的Oracle數據庫:的Oracle SQL查詢 - 年齡

create table FilmStar (
    filmStarID char(25) not null, 
    filmStarName char(50) not null, 
    birthplace char(50) not null, 
    yearBorn  char(25) not null, 
    yearDied  char(25), 

    primary key (filmStarID) 
); 

insert into FilmStar values ('0001','Tim Robbins','California, United States','1958',null); 

insert into FilmStar values ('0005','Marlon Brando','Nebraska, United States','1924','2004'); 

我需要完成以下查詢:列出的唯一編號,名稱,誰是死者的所有影視明星的青睞。

我相信,我需要

select * from FilmStar where yearDied is not null 

但如何找出年齡?

+0

爲什麼你要爲MySQL標記這個MySQL? – Barmar

+0

爲什麼'yearBorn'和'yearDied'存儲爲字符串? –

回答

0

我寧願要明確有關類型轉換:

select . . ., 
     (cast(yearDied as int) - cast(yearBorn as int)) as approximate_age 
from FilmStart 
where yearDied is not null; 

依託隱式轉換可能導致非常難以發現的錯誤。將數字存儲爲字符串會加劇此問題。

注意:在Oracle中,爲此目的,傾向於使用to_number()而不是cast()

+0

to_date()在這種情況下會比to_number()更好。 – ffarquet

+0

@ffarquet。 。 。除了該值似乎只包含年份。 –

+0

與to_date()更一般。例如,年份可以用2位數編碼。 to_date()會在這種情況下工作,但不是to_number()。 – ffarquet