比较两栏文字

时间:2018-07-12 12:55:32

标签: sql

我正在对此数据集进行清理 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.*?')

1 个答案:

答案 0 :(得分:0)

如果CASEevent和一个空格开头,则可以使用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语句显示表的外观,并使用纯文本显示所需的结果。