我有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