Mysql自动在减法后插入一个值

时间:2013-01-02 10:48:12

标签: mysql

我正在开发汽车租赁系统。表'Hire'包含hireDatereturnDate等字段。我希望能够计算租金并将该值自动插入数据库(同一表格)。

我想知道我是否可以减去这两个日期字段,并且由此产生的值可以乘以某个数字(比如300)并自动添加到另一个名为“Rent_Due”的属性中。我们的想法是通过获取天数然后将其乘以一定数量来计算到期的总租金。因此,对于每个雇用的雇员,我只需输入招聘日期和返回日期,并自动填写Rent Due属性。这有可能吗?

我不知道我需要提供哪些更多信息来寻求帮助,如果您需要我的ERD图片,请告诉我。 谢谢!

4 个答案:

答案 0 :(得分:1)

假设您想以天计算的差异,这应该有用。

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

答案 1 :(得分:0)

就个人而言,我会避免在数据库中计算字段,并尝试将其标准化。

相反,您可以在租用期间使用视图,从而使用价格。

示例如下:

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

(这假设您的Hire表中有一个名为hireId的主键) 您可以通过将持续时间乘以某个常数来轻松修改视图以获得租用成本,如果成本永远不会改变,那就没关系,但是如果您希望拥有不同租用率的灵活性,则您不想要在SQL中硬编码速率。

答案 2 :(得分:0)

您不需要创建另一个字段,您可以通过以下查询获得结果。

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

答案 3 :(得分: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 ;