MySQL默认日期()+ 14天,一列?

时间:2012-02-08 09:40:28

标签: php mysql date default-value

我想知道以下是否可以通过MySQL进行,或者是否必须使用PHP完成。

任务 - “到期日期”

  1. 用户输入产品名称
  2. 用户点击提交表单按钮
  3. 数据已POST,然后发送到MySQL
  4. 有效期=现在日期+ 14天
  5. 我想要实现的是mysql在表列中插入“expiry_date”的方法,该表将在该表中创建行的日期后14天内等。

    e.g。

    product_name - foo
    entry_date - 2012-02-01
    expiry_date - 2012-02-15
    

    我觉得除非使用存储过程,否则可能无法在mysql中执行。

    我很高兴用PHP做到这一点,但是我希望如果能用mysql做到这一点,它会在我的系统中留下更少的错误空间。

    由于

8 个答案:

答案 0 :(得分:5)

创建一个表并为该表设置触发器。

CREATE TABLE product(
    product_id INT PRIMARY KEY,
    product VARCHAR(40),
    entryDate DATETIME,
    expDate DATETIME
);

CREATE TRIGGER test_trigger BEFORE INSERT ON `product` 
FOR EACH ROW SET
    NEW.entryDate = IFNULL(NEW.entryDate, NOW()),
    NEW.expDate = TIMESTAMPADD(DAY, 14, NEW.entryDate);

在表格的每个插入中,触发器将entryDate设置为当前时间,将expDate设置为14天。

答案 1 :(得分:2)

您可以使用 MySQL

中的DateTime方法来使用此功能
DATE_ADD(date_starts,INTERVAL 14 DAY)

例如:

UPDATE events SET date_starts = DATE_ADD(date_starts,INTERVAL 14 DAY) WHERE event_id = 3;

有关详细信息,请转到here

答案 2 :(得分:1)

date = DATE_ADD(NOW(), INTERVAL 14 DAY)

或如上所述,将该字段的表结构(该字段的属性=)更改为“更新CURRENT_TIMESTAMP”

答案 3 :(得分:1)

你可以尝试这个功能

DATE_ADD(now(), INTERVAL 14 DAY);

答案 4 :(得分:1)

根据此source,您不能将表达式用作默认说明符。

因此,不确定自发布错误后它是否已更改。

我不确定为什么我认为OP想要将其定义为默认值。

答案 5 :(得分:1)

我相信MySQL不允许你在默认值中使用表达式。你可能想写一个触发器。

MySQL确实提供了TIMESTAMP数据类型,当创建或更新行时,该数据类型可以设置为CURRENT_TIMESTAMP。您可能会发现此功能有点有用:

CREATE TABLE table1 (
    `Column1` VARCHAR(50) NULL,
    `Created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)

一旦您确定MySQL按预期填充该列,您就可以编写如下查询:

SELECT `Created`, `Created` + INTERVAL 14 DAY AS `expiry_date`
FROM table1

答案 6 :(得分:0)

解决这个问题的最简单方法就是插入您想要的值 - 无需触发或稍后更新,例如。

 INSERT INTO <your_table> (name, expiry_date) VALUES ('foo', DATE_ADD(CURRENT_TIMESTAMP,INTERVAL 7 DAY))

答案 7 :(得分:0)

我更喜欢这种格式:

SELECT NOW()+INTERVAL 14 DAY