1

我在 mysql 中有一个表“setlists”,其中包含 int 类型的列“年”“月”“日”,我想将 str_to_date 并连接到同一个表中的新列“日期”中。这是我到目前为止所拥有的,但我似乎无法正确使用语法。它不会运行。我已经创建了新的日期列并将其设置为日期类型。

UPDATE setlists
SET date = str_to_date(concat(year,'-',month,'-',day), '%Y-%m-%d') FROM setlists

数据:

我正在尝试将年月日列连接到同一张表的日期列中。

date  year  month  day
null  2018  01     01
null  2017  01     01

当前错误输出如下:

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“FROM setlists”附近使用正确的语法

4

4 回答 4

4

只需FROM setlists在更新查询结束时删除。它不属于那里。

UPDATE setlists
SET date = str_to_date(concat(year,'-',month,'-',day), '%Y-%m-%d');

SQL 更新语法是这样的,即目标表被指定为以下任何内容UPDATE

于 2018-04-01T11:00:57.303 回答
1

对于更新查询,您不应该使用FROM [table],除非您使用SELECT查询作为输入,否则您已经定义了要使用 更新的表UPDATE setlists

从您的查询中删除FROM setlists以使其工作。

请参阅此处的 UPDATE 查询语法文档

所以:

UPDATE setlists
SET date = STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%Y-%m-%d');

请参阅:SQL 小提琴

于 2018-04-01T11:02:08.600 回答
0

检查年月日函数的使用情况

   UPDATE setlists
    SET date = str_to_date(concat(year(sysdate()),'-',month(sysdate()),'-',day(sysdate())), '%Y-%m-%d');

如果这些是列,那么

UPDATE setlists
SET date = str_to_date(concat(year,'-',month,'-',day), '%Y-%m-%d');
于 2018-04-01T11:01:08.997 回答
0

有一个更整洁的方法:

DATE(CONCAT_WS('-', year, month, day))
于 2021-05-19T08:10:32.387 回答