【问题标题】:CURDATE() causes an syntax errorCURDATE() 导致语法错误
【发布时间】:2011-10-18 05:38:05
【问题描述】:

大家

我想添加一个默认值为当前日期()的列 start_date,所以我使用以下命令:

alter table validation add column start_date date default CURDATE()

但它不起作用并告诉我它有语法错误。

虽然使用以下这样的命令效果很好:

alter table validation add column start_date date default 0

欢迎提出任何建议。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    来自online documentation(我的粗体字):

    数据类型规范中的DEFAULT value 子句表示列的默认值。除了一个例外,默认值必须是一个常数;它不能是函数或表达式。

    这意味着,例如,您不能将日期列的默认值设置为 NOW() 或 CURRENT_DATE 等函数的值。

    例外情况是您可以将 CURRENT_TIMESTAMP 指定为 TIMESTAMP 列的默认值。

    这就是为什么default 0 有效(一个常量)而default curdate() 无效(一个函数)。

    你有(至少)几种可能来解决这个问题。

    第一种是使用时间戳列而不是日期列,并将其默认设置为CURRENT_TIMESTAMP。不幸的是,这意味着您必须在提取它时将其转回日期。

    第二种是使用触发器来设置列值,而不是从一个默认值开始。例如,使用插入触发器将相关列设置为当前日期。

    【讨论】:

    • 啊哈,我刚刚发布了完全相同的答案(即使是“粗体是我的”部分!)。不过你比我快 1 分钟,所以我会删除我的
    【解决方案2】:

    数据类型规范中的 DEFAULT value 子句表示 列的默认值。除了一个例外,默认值必须 是一个常数;它不能是函数或表达式。

    【讨论】:

      【解决方案3】:

      您是否尝试过 SYSDATE()。

      Select SYSDATE();
      

      这将为您提供以下格式:2011-09-29 16:11:39

      【讨论】:

      • 这不是 OP 所要求的
      猜你喜欢
      • 2016-08-23
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      相关资源
      最近更新 更多