2013-01-02 28 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 ;