我想知道以下是否可以通过MySQL进行,或者是否必须使用PHP完成。
任务 - “到期日期”
我想要实现的是mysql在表列中插入“expiry_date”的方法,该表将在该表中创建行的日期后14天内等。
e.g。
product_name - foo
entry_date - 2012-02-01
expiry_date - 2012-02-15
我觉得除非使用存储过程,否则可能无法在mysql中执行。
我很高兴用PHP做到这一点,但是我希望如果能用mysql做到这一点,它会在我的系统中留下更少的错误空间。
由于
答案 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)
答案 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