0

我正在研究汽车租赁系统。'Hire' 表具有 、 等字段hireDatereturnDate我希望能够计算租金并将该值自动插入数据库(同一张表)。

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

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

4

4 回答 4

1

假设您想在几天内计算出差异,这应该可行。

INSERT INTO yourTable (hireDate, returnDate, Rent_Due) VALUES
(StartDate. EndDate, DATEDIFF(EndDate, StartDate)*300)
于 2013-01-02T10:56:00.223 回答
0

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

相反,您可以使用视图来了解租用期间以及价格。

示例如下:

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

(这假设您的 Hire 表中有一个名为hireId 的主键)您可以通过将持续时间乘以某个常数来轻松修改视图以具有雇用成本,如果成本从未改变,那将是可以的,但如果它你想拥有不同雇佣率的灵活性你不想在你的 SQL 中硬编码一个费率。

于 2013-01-02T10:57:38.547 回答
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 ;
于 2013-01-02T13:04:50.537 回答
0

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

select (datediff(hireDate, returnDate)*300) as rent,hireDate,returnDate from Hire;
于 2013-01-02T11:00:47.383 回答