2011-10-18 111 views
3

大家CURDATE()会导致一个语法错误

我想增加一列起始日期,其默认值是当前日期(),所以我用下面的命令:

ALTER TABLE添加验证列起始日期日期默认CURDATE ()

但它没有工作,并告诉我它有语法错误。

虽然使用这样的以下命令工作良好:

ALTER TABLE验证添加列起始日期日期默认为0

任何建议表示赞赏。

回答

7

online documentation(我的粗体显示):

在数据类型说明书中的DEFAULT值子句表示为列的默认值。有一个例外,默认值必须是是一个常数;它不能是一个函数或表达式。

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

例外是,您可以指定CURRENT_TIMESTAMP作为TIMESTAMP列的默认值。

这就是为什么default 0工作(一个常数),但default curdate()不(功能)。

你有(至少)一些可能性来解决这个问题。

首先是使用时间戳列而不是日期列,并将其默认值设置为CURRENT_TIMESTAMP。不幸的是,这意味着你将不得不在提取它时把它变回日期。

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

+0

AHAH,我刚刚张贴同样的确切答案(甚至是“大胆的是我”的一部分!)。你虽然打败了我1分钟,所以我会删除我的 – nico

0

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

0

你试过SYSDATE()。

Select SYSDATE(); 

这会给你以这种格式:2011-09-29 16:11:39

+0

这不是OP所要求的 – nico