MySQL default date() + 14 days, for a column?

孤街醉人 提交于 2019-11-28 04:39:13

问题


I was wondering if the following is possible to do through MySQL or will it have to be done using PHP.

Task - "Expiry Date"

  1. User enters product name
  2. User clicks submit form button
  3. Data is POST'ed and then sent to MySQL
  4. Expiry date = date now + 14 days

What I am trying to achieve is a way for mysql to insert an "expiry_date" in a table column that will equal 14 days after the date the row was created in that table.

e.g.

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

I have a feeling it may not be possible to do in mysql unless using a stored procedure.

I am happy to do it in PHP however I was hoping if I could do it with mysql it would leave less scope for error in my system.

Thanks


回答1:


Create a table and set up a trigger for that table.

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);

On each insert into the table, the trigger sets the entryDate to the current time and expDate to 14 days time.




回答2:


You can use this by using DateTime methods in MySQL:

DATE_ADD(date_starts,INTERVAL 14 DAY)

for example:

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

For more details go here.




回答3:


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

or as said, alter your table structure for that field (attribute for that field=) to "on Update CURRENT_TIMESTAMP"




回答4:


you can try this this function

DATE_ADD(now(), INTERVAL 14 DAY);




回答5:


According to this source you can't use expressions as a default specifier.

So not sure if it has changed since the bug was posted.

I'm not sure however why I assumed that the OP wants to define it as a default value.




回答6:


I believe MySQL won't allow you to use expressions in the default value. You might want to write a trigger.

MySQL does provide a TIMESTAMP datatype which can be set to CURRENT_TIMESTAMP when a row is created or updated. You might find this feature somewhat useful:

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

Once you're sure that MySQL is filling that column as expected, you can write queries like this:

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



回答7:


The easiest way to solve that is just insert the value you want - without trigger or later update, eg.

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


来源:https://stackoverflow.com/questions/9190758/mysql-default-date-14-days-for-a-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!