我有一个字符串,需要在ORACLE SQL中删除重复的select语句。如:"apple-HenryHenry(男性)-SunnySunny(女)-苹果的我希望得到的输出是:"apple-Henry(男)-Sunny(女)-apple"大家帮帮我
SELECT REGEXP_REPLACE('apple-HenryHenry(Male)-SunnySunny(Female)-apple', '([[:alnum:]]+)(1)+', '1') AS result
FROM dual;
你的查询基本正确,但它会从单词中删除双字母,单词的重复部分(如banana
->bana
)。
你可以这样写
SELECT REGEXP_REPLACE('apple-HenryHenry(Male)-SunnySunny(Female)-apple', '(^|W)(w+)2+(W|$)', '123') AS result
FROM dual;
这里(^|W)(w+)2+(W|$)
匹配由两个或多个相等部分组成的非单词符号或字符串边界包围的单词。
这是不理想的,因为它会修改haha
->ha
。如果保证重复单词的两个部分都以大写字母开头,则可以使用(^|W)([A-Z]w*)2+(W|$)
。
SELECT REGEXP_REPLACE('bananabanana-HenryHenry(Male)-SunnySunny(Female)-apple', '(^|W)([A-Z]w*)2+(W|$)', '123') AS result
FROM dual;
-- Outputs: bananabanana-Henry(Male)-Sunny(Female)-apple