我正在对此数据集进行清理 https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results,使用Dremio(在线工具),因此我可以使用SQL编辑器(但我不知道它使用的是什么DBMS)。
现在,我尝试从“事件”列中删除“运动”列中包含的单词。 (我确实在“事件”列中做了一些修改,删除了“男人”和“女人”一词的出现。)
找到附件
The current situtation and the desired result
我该如何解决问题?
希望我已经清楚了,谢谢您的帮助。 :)
编辑:我找到了Dremio进行的原始查询
SELECT ID, Name, Gender, Age, Height, Weight, Team, "Olympic Games"."Year" AS "Year", Season, City, Sport, CASE WHEN regexp_like(CASE WHEN regexp_like(Event, '.*?\QMen''s\E.*?') THEN regexp_replace(Event, '\QMen''s\E', '') ELSE Event END, '.*?\QWomen''s\E.*?') THEN regexp_replace(CASE WHEN regexp_like(Event, '.*?\QMen''s\E.*?') THEN regexp_replace(Event, '\QMen''s\E', '') ELSE Event END, '\QWomen''s\E', '') ELSE CASE WHEN regexp_like(Event, '.*?\QMen''s\E.*?') THEN regexp_replace(Event, '\QMen''s\E', '') ELSE Event END END AS Event, Medal
FROM "@Sboorn"."Olympic Games"
WHERE NOT regexp_like(ID, '.*?\QID\E.*?')
答案 0 :(得分:0)
如果CASE
以event
和一个空格开头,则可以使用sport
来修饰。如果是这样,请使用substring()
来省略 n 的前 n 个字符,sport
的长度和空格。其他返回event
不变。
SELECT sport,
CASE
WHEN event LIKE concatenate(sport, ' %') THEN
substring(event, length(sport) + 2, length(event) - length(sport) - 1)
ELSE
event
END event
FROM elbat;
由于您没有标记实际的DBMS,所以函数的名称可能会有所不同(例如,concat()
代替concatenate()
,substr()
代替substring()
或{{ 1}},而不是len()
)。但是在大多数DBMS中应该有一些等效的功能。
根据实际的DBMS,可能还会有更优雅的解决方案,例如正则表达式。
下次请不要发布图片。使用length()
和CREATE TABLE
语句显示表的外观,并使用纯文本显示所需的结果。