SQL替换函数在使用它替换一个字符串时出错



我有event表,其中有两个字段名为sport,event_name。这些值包括:

{sport:"竞技"项目名称:"竞技100米"}

我想要的是使用replace函数来替换event_name中与sport的字符串匹配的字符串。所以最终的输出是这样的:

{sport:"Athletic";event_name:"100米"}

我还将其与其他表连接在一起,因此只有要替换的ID也存在于其他表中所以我在下面的代码中使用了这种方式。但这应该是一个错误:;所需项目:<结果列>"。谢谢

SELECT
ae.id ,
ae.city AS event_city,
ae.sport,
REPLACE(ae.event,ae.sport,' ') AS event_name ,
FROM
athlete_events ae
inner join
players_personalinfo pp on
pp.id=ae.id

您需要定义表别名:

SELECT ae.id AS event_id, ae.city AS event_city, ae.sport,
REPLACE(ae.event, ae.sport, ' ') AS event_name ,
ae.event
FROM athlete_events ae JOIN
players_personalinfo pp
ON pp.id = ae.id;

我还建议您调整结果:

TRIM(REPLACE(ae.event, ae.sport, ' ')) AS event_name,

这将删除前导空格和尾部空格。

REPLACE函数区分大小写。试着检查数据,以确保每个数据的大写字母相同。

前面的答案有效,但您需要修改查询中的一个字段名。在您的描述中,您提到字段名称为">event_name";,但在你的询问中,你只提到了">事件";(ae.event(.

此外,我有点惊讶的是,event_id会加入玩家的个人资料id。看起来有点奇怪。

无论如何,我确认这个SQL在postgres和oracle数据库中都有效。。。

SELECT
ae.id AS event_id,
ae.city AS event_city,
ae.sport,
ae.event_name as event_name_original
REPLACE(ae.event_name,ae.sport,' ') AS event_name_kinda_ugly,
TRIM(REPLACE(ae.event_name,ae.sport,' ')) AS event_name_clean
FROM
athlete_events ae
inner join
players_personalinfo  pp on pp.id=ae.id

最新更新