如何在mysql表中插入日期

时间:2010-04-20 15:33:43

标签: mysql date

我有一个名为pollOfTheWeek的mysql表。它有一个类型为date的列“pollDate”。我有两个问题: 1.我在创建表时声明了列作为[pollDate date]我想要的是当用户没有为此列输入任何值时自动设置此列。如何声明列以实现此目的?

  1. 假设我有与上述相同的声明,我该如何输入空值。我的意思是如果列是varchar类型,我会输入空值为“”。但由于它是date类型,因此当我输入值为“”时会出现错误。如何为pollDate列输入空值?

3 个答案:

答案 0 :(得分:2)

您需要创建一个触发器:

CREATE TRIGGER triggerName
BEFORE INSERT ON yourTable
FOR EACH ROW
SET NEW.date = coalesce(NEW.date, curdate());

空值为null

答案 1 :(得分:1)

无法在mysql中自动将DATE列设置为当前日期/时间。 TIMESTAMP可以自动设置为当前时间。或者,在插入时只需将NOW()作为参数传递:

INSERT INTO pollOfTheWeek (name, pollDate) VALUES ('someName', NOW());

关于您的其他问题,您可能希望在日期列中允许NULL值,并在没有给出日期时将它们设置为NULL。

答案 2 :(得分:1)

MySQL对默认值的支持非常有限。通常,它必须是'0''(none)'之类的常量表达式,并且不允许使用函数。我知道的唯一例外是您可以将CURRENT_TIMESTAMP设置为TIMESTAMP列的默认值;但是,这不适用于DATEDATETIME列。不幸的是,TIMESTAMP的范围较小,包含时间信息。

所以你的选择是:

  1. 通过在插入中将NOW()设置为值,在客户端应用程序中执行此操作。
  2. 写一个触发器:
  3. CREATE TRIGGER pollOfTheWeek_trg BEFORE INSERT ON pollOfTheWeek 
        FOR EACH ROW SET NEW.pollDate = NOW();
    

    关于空值,我只想使用NULL。为什么要使用空字符串?