mysql - 连接作为表的特定字段一部分的子字符串以创建新字段的正确代码

标签 mysql concatenation

我在 Mac OS X 上使用 MySQL 5.6.26 和 Sequel Pro。我想在表 starting_pitcher_game_log 中创建一个名为 Game_date 的新字段。为了创建该字段,我必须从该表中名为 GAME_ID 的另一个字段中提取并附加子字符串。这是我的代码:

ALTER TABLE starting_pitcher_game_log ADD Game_date INTEGER;
UPDATE starting_pitcher_game_log 
SET Game_date = CONCAT(SUBSTR(GAME_ID,4,4),'-',SUBSTR(GAME_ID,10,2),'-',SUBSTR(GAME_ID,12,2)) 
FROM game
WHERE game.GAME_ID = starting_pitcher_game_log.GAME_ID

我收到以下错误消息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM game WHERE game.GAME_ID = starting_pitcher_game_log.GAME_ID' at line 3

有人可以就这里的代码有什么问题提供指导吗?

如果您需要更多信息,请告诉我。

提前谢谢你。

Subin 代码更改后的状态更新: 感谢您的帮助苏斌。不工作。我删除了具有空值的字段。然后我输入你的原始代码:

ALTER TABLE starting_pitcher_game_log ADD Game_date INTEGER; 更新 starting_pitcher_game_log INNER JOIN game ON game.GAME_ID = starting_pitcher_game_log.GAME_ID SET starting_pitcher_game_log.Game_date = CONCAT(SUBSTR(game.GAME_ID,4,4),'-',SUBSTR(game.GAME_ID,10,2),'-',SUBSTR(gam‌ e.GAME_ID,12,2))

它给出了一个错误:“字段列表”中的未知列“starting_pitcher_game_log.Game_date”。当我在“ADD”之后添加“COLUMN”时,查询运行但只向列添加空值。

我不确定我做错了什么。

view of sequel pro of MySQL database table in question "starting_pitcher_game_log"

Subin,根据您的更改,查询每次都会运行,但它仍然会在 Game_id 列的每一行保留“null”。以上是 starting_pitcher_game_log 表的表内容 View 的屏幕截图。 “Game_ID”列在那里,这就是我一直试图从中提取信息以创建 Game_date 列的地方——日期在字符编号 4 到 11 之间表示。我不确定这是否有帮助。

无论如何,感谢您的帮助。

更新:

这是有效的代码:

ALTER TABLE retrosheet.starting_pitcher_game_log ADD COLUMN Game_Date DATE;
UPDATE retrosheet.starting_pitcher_game_log AS b,
retrosheet.game AS g
SET b. Game_Date = CONCAT(SUBSTR(g.`GAME_ID`,4,4),'-',SUBSTR(g.`GAME_ID`,8,2),'-',SUBSTR(g.`GAME_ID`,10,2))
WHERE b.`Game_ID` = g.`GAME_ID`

最佳答案

您可以将 JOIN 与您的 UPDATE() 一起使用。

ALTER TABLE starting_pitcher_game_log ADD Game_date VARCHAR(15);
UPDATE starting_pitcher_game_log 
  INNER JOIN  game ON game.`GAME_ID` = starting_pitcher_game_log.`GAME_ID`
SET starting_pitcher_game_log.`Game_date` = CONCAT(SUBSTR(game.`GAME_ID`,4,4),'-',SUBSTR(game.`GAME_ID`,10,2),'-',SUBSTR(game.`GAME_ID`,12,2)) 

不使用 JOIN 关键字实现相同结果的替代方法。

UPDATE starting_pitcher_game_log ,game
SET starting_pitcher_game_log.`Game_date` = CONCAT(SUBSTR(game.`GAME_ID`,4,4),'-',SUBSTR(game.`GAME_ID`,10,2),'-',SUBSTR(game.`GAME_ID`,12,2)) 
WHERE  game.`GAME_ID` = starting_pitcher_game_log.`GAME_ID`

希望这对您有所帮助。

关于mysql - 连接作为表的特定字段一部分的子字符串以创建新字段的正确代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33749141/

相关文章:

php - MySQL拉取数据后出现奇怪的结果

node.js - 如何为串联文件创建源映射

Excel 连接

java - 我使用驱动程序 <com.mysql.cj.jdbc.Driver>,但 'junit test' 不断导致错误

python - 除了逗号、百分号和加号之外,还有其他格式化字符串的方法吗?

google-sheets - 组合数据后如何获得连接文本的查询?

ansible - 在ansible playbook中连接多个变量和字符串

php - 我的截止日期是 5 天,我需要为每个非工作日(周末或节假日)添加 +1 天

mysql - 将mysql列拆分为数字和字符

php - 在 PHP 中编写条件 mySQL 查询的语法问题