在mysql中如何将“monthname()”函数设置为列默认值?

umuewwlo  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(779)

实际上,我需要当前月份名称作为小写字符串作为表列中的默认值;db表可能如下所示:

name : john
joined : january

当我尝试使用mysql函数时 LOWER( MONTHNAME( NOW() ) ) 作为默认值,这给了我错误。顺便说一句,我对创建触发器不感兴趣。
有什么神奇的疑问吗?

ivqmmu1c

ivqmmu1c1#

从mysql文档:
除了一个例外,将表达式默认值括在括号内,以区别于文本常量默认值。
因此,以下方法应该有效:

CREATE TABLE yourTable (
    month_name VARCHAR(12) DEFAULT (LOWER(MONTHNAME(NOW())))
    ...
)

正如@madhur所指出的,使用表达式作为默认值只能从mysql 8开始使用。

nwo49xxi

nwo49xxi2#

如果您使用mysql 8.0或更高版本,那么@timbiegeleisen和@fa06提供的答案应该可以解决这个问题。否则
... default子句中指定的默认值必须是文字常量;它不能是函数或表达式。
请参阅文档中的详细信息。
因此,对于以前的版本,您需要找到另一种方法。例如,可以定义一个触发器,在未指定值的情况下为列设置默认值:

CREATE TABLE MyTable (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  joined  VARCHAR(12)
);

CREATE TRIGGER defaultMonth
BEFORE INSERT ON MyTable
FOR EACH ROW 
SET NEW.joined = IFNULL(NEW.joined, LOWER(MONTHNAME(NOW())));

有关建议的解决方案,请参见示例。

omqzjyyz

omqzjyyz3#

你可以在下面试试

CREATE TABLE orderdata (

    order_date DATE
  , order_month VARCHAR(50) AS (lower(MONTHNAME(order_date))) 

);

相关问题