如果你从这样的表开始:
create table my_table (
first_name varchar(15),
last_name varchar(15),
salary integer,
hire_date date
);
insert into my_table values ('A', 'Beemer', 30000, '2011-01-15');
insert into my_table values ('B', 'Catalog', 31000, '2011-01-27');
insert into my_table values ('C', 'Doir', 45000, '2011-03-11');
您可以使用 SELECT 语句返回这样的结果。
first_name last_name salary hire_date renewal_date days_to_renewal
--
A Beemer 30000 2011-01-15 2012-01-15 57
B Catalog 31000 2011-01-27 2012-01-27 69
C Doir 45000 2011-03-11 2012-03-11 113
您应该记住,“月”是一个模糊的词,大多数数据库人都怀着炽热的热情讨厌这个词。它可以表示真实日历上的 28、29、30 或 31 天。当期望与常识不符时,你总是会受到指责。
对我的数据运行查询会返回这些值。明显错了。
LAST_NAME MONTHS_TO_RENEWAL
Beemer .154442577658303464755077658303464755078
Catalog .186700642174432497013142174432497013143
Doir .310356556152927120669056152927120669056
Oracle has a months_between() function 记录返回“两个日期之间的月数”。您需要确切地知道“月数”对这个函数意味着什么。 (同样,考虑到一个日历月可能有 28、29、30 或 31 天。)如果您希望以其他方式进行算术,我会感到非常惊讶。
我建议你从这个开始,并填写三个缺失的部分。
select first_name, last_name, salary, hire_date,
('date arithmetic to calculate the renewal date') renewal_date,
months_between('one date', 'another date') months_to_renewal
from my_table;