使用SQLreplace函数替换一个字符串时出错

e0uiprwp  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(285)

我有一个event表,其中有两个字段名为sport,event\u name。这些价值观包括:
{体育:“竞技”;项目名称:“运动100米”}
我想要的是使用replace函数来替换事件名称中与sport中的字符串匹配的字符串。所以最终的结果是:
{体育:“竞技”;事件名称:“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
zrfyljdw

zrfyljdw1#

您需要定义表别名:

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,

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

ntjbwcob

ntjbwcob2#

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

jjhzyzn0

jjhzyzn03#

前面的答案有效,但您需要修改查询中的一个字段名。在描述中,您提到字段名是“event\u name”,但在查询中,您只引用了“event”(ae.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

相关问题