创建MySQL表并使用monthname函数

时间:2016-12-25 12:08:49

标签: mysql create-table

在MySQL中创建表时不确定如何使用monthname函数。我所要做的就是在A列中输入时,然后B列应根据A栏中的输入用单词填写月份名称。

我使用一个简单的html表单将值发布到MySQL。 用户填写HTML数据,如姓名,Orderno,订单日期,数量和项目名称。

这些值将发布到MySQL表orderdata。 MySQL表包含id,name,orderno,order_date,order_month,quantity和item_name等列。

希望order_month列根据order_date自动填充月份名称。

以下是我尝试的语法

create table orderdata (id int, order_date date, order_month DEFAULT ON UPDATE MONTHNAME(order_date),quantity int,item_name varchar(50));
  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'DEFAULT ON UPDATE MONTHNAME(order_date)附近使用的语法,数量   第1行的int,item_name varchar(50))'

create table orderdata (id int, order_date date, order_month UPDATE test.orderdata SET month= MONTHNAME(order_date),quantity int,item_name varchar(50));
  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'UPDATE test.orderdata SET month =附近使用的语法   MONTHNAME(order_date),数量int,第1行的item_name va'

任何帮助使人们非常感激

谢谢

2 个答案:

答案 0 :(得分:1)

如果您使用的是MySQL 5.7.6或更高版本,则可以使用生成的列并在没有触发器的情况下执行此操作。

创建表格

CREATE TABLE orderdata (
    id INT   
  , order_date DATE
  , order_month VARCHAR(50) AS (MONTHNAME(order_date)) #generated column
  , quantity INT
  , item_name VARCHAR(50)

);

插入查询。

INSERT INTO orderdata (id, order_date, quantity, item_name)  VALUES(1, '2016-12-25', 1, 'item 1');

<强>结果

SELECT * FROM orderdata;


 id  order_date  order_month  quantity  item_name  
------  ----------  -----------  --------  -----------
     1  2016-12-25  December            1  item 1     

答案 1 :(得分:0)

您正尝试在表定义中添加触发器的作业。

基本上,你的桌子的创作应该是:

CREATE TABLE orderdata 
   (id INT, order_date DATE, order_month VARCHAR(15), quantity INT, item_name VARCHAR(50));

根据MySQL Trigger文档,您将拥有以下触发器来实现您的目的:

DELIMITER $$

USE `<DATABASE-NAME>`$$

CREATE DEFINER = CURRENT_USER TRIGGER `<DATABASE-NAME>`.`orderdata_BEFORE_INSERT` 
       BEFORE INSERT ON `orderdata` FOR EACH ROW
BEGIN
    SET NEW.order_month = MONTHNAME(NEW.order_date);
END $$

DELIMITER ;

然后,当您执行任何给定的INSERT时,它会自动为您添加月份。

示例:

INSERT INTO `orderdata`(`id`, `order_date`, `order_month`, `quantity`, `item_name`) 
    VALUES (3,NOW(),NULL,23,'First order');

结果是:

orderdata table