MySQL concat年月日期colums to date列在同一个表

时间:2018-04-01 10:44:01

标签: mysql concat str-to-date

我在mysql中有一个表'setlists',其中int类的列'年''月''天'我想str_to_date并在同一个表中连接到新列'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 个答案:

答案 0 :(得分:1)

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

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

SQL更新语法使得目标表被指定为UPDATE之后的任何内容。

答案 1 :(得分:1)

使用更新查询时,除非您使用FROM [table]查询进行输入,否则不应使用SELECT,您已使用UPDATE setlists定义了要更新的表格。

从查询中删除FROM setlists以使其正常工作。

请参阅UPDATE query syntax documentation here

所以:

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

请参阅:SQL Fiddle

答案 2 :(得分: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');

答案 3 :(得分:0)

有一个更简洁的方法:

DATE(CONCAT_WS('-', year, month, day))