2013-01-02 87 views
0

我正在使用汽车租赁系统。表'Hire'的字段有hireDatereturnDate等。我希望能够计算租金并自动将该值插入数据库(同一张表)。Mysql在减法运算后自动插入一个值

我想知道如果我可以减去这两个日期字段,并从中产生的值可以乘以一定数量(比如300)并自动添加到另一个属性,名为'Rent_Due'。这个想法是通过获得天数来计算总租金,然后乘以一定数量。因此,对于所做的每一次招聘,我只需输入招聘日期和退回日期,租金到期属性将自动填写。这有可能吗?

我不知道我需要提供什么更多的信息来寻求帮助,请让我知道,如果你可能需要我的ERD的图像。 谢谢!

回答

1

假设你想在天内计算的差异,这应该工作。

INSERT INTO yourTable (hireDate, returnDate, Rent_Due) VALUES 
(StartDate. EndDate, DATEDIFF(EndDate, StartDate)*300) 
+0

谢谢@Cynical!我是新手,感谢您的帮助! –

0

就我个人而言,我会避免在数据库中计算字段,并尽量保持它的规范化。

您可以在租用期间和价格中使用视图。

举例如下:

create view hire_duration as (
    select hireId, hireDate, datediff(returnDate,hireDate) as duration 
    from Hire 
); 

(这里假设你有你的录用表称为hireId主键) 你可以很容易地修改视图有聘请的成本,但是通过一些乘以时间不变,如果成本从未改变,那也没关系,但是如果你想拥有不同雇佣率的灵活性,你不想在你的SQL中硬编码一个费率。

+0

谢谢@NickJ,会考虑你的解决方案:) –

0

你不需要创建另一个字段,你可以得到你的结果是以下查询。

select (datediff(hireDate, returnDate)*300) as rent,hireDate,returnDate from Hire; 
0

您是否正在寻找类似的东西?

之前,插入-事件:

DELIMITER $$ 
    CREATE TRIGGER name_of_before_insert_trigger BEFORE INSERT ON name_of_table 
    FOR EACH ROW BEGIN 
    SET NEW.Rent_Due = DATEDIFF(NEW.returnDate, NEW.hireDate) * 300; 
    END; 
    $$ 
DELIMITER ; 

之前 - 更新 - 事件:

DELIMITER $$ 
    CREATE TRIGGER name_of_before_update_trigger BEFORE UPDATE ON name_of_table 
    FOR EACH ROW BEGIN 
    SET NEW.Rent_Due = DATEDIFF(NEW.returnDate, NEW.hireDate) * 300; 
    END; 
    $$ 
DELIMITER ; 

每日的房价,你也可以外包在一个单独的表:

DELIMITER $$ 
    CREATE TRIGGER name_of_before_insert_event_trigger BEFORE INSERT ON name_of_table 
    FOR EACH ROW BEGIN 
    SET NEW.Rent_Due = DATEDIFF(NEW.returnDate, NEW.hireDate) * (SELECT value FROM name_of_price_table LIMIT 1); 
    END; 
    $$ 
DELIMITER ;