与标题中的im一样,搜索创建新表的方式。该表将是每月合同表
create table NR1
(
id INTEGER not null,
price INTEGER,
price2 INTEGER,
start_date DATE,
end_date DATE,
duration NUMBER
)
根据持续时间,我想将整个日期从start_date到end_date切成小的月份,并将其作为一行,例如,如果持续时间为5且开始日期为2018-05-01的一行,那么我想在新表中每个月都有5行,所以2018-05-01、2018-06-01,...,2018-10-01。
您能告诉我应该使用什么来解决这个问题吗?
答案 0 :(得分:1)
您可以创建这样的视图。
示例行
INSERT INTO NR1 (id,price,price2,start_date,end_date,duration) VALUES ( 1,20,40,DATE '2018-05-01',NULL, 5);
INSERT INTO NR1 (id,price,price2,start_date,end_date,duration) VALUES ( 2,30,60,DATE '2018-02-01',NULL, 6);
查看
CREATE OR REPLACE VIEW v_NR1 AS
SELECT id,price,price2,
add_months(start_date,level - 1) AS start_date,
last_day(add_months(start_date,level - 1) ) AS end_date
FROM
nr1
CONNECT BY level <= duration
AND PRIOR id = id
AND PRIOR sys_guid() IS NOT NULL;
答案 1 :(得分:0)
要解决此问题,您可以在表上创建触发器,并根据需要参考表中的字段。