我在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”附近使用正确的语法
答案 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))