我有一个字符串,需要删除重复的选择语句在ORACLE SQL。例如:'apple-HenryHenry(Male)-SunnySunny(Female)-apple'我想得到的输出是:'苹果-亨利(男)-桑尼(女)-苹果'大家帮帮我
SELECT REGEXP_REPLACE('apple-HenryHenry(Male)-SunnySunny(Female)-apple', '([[:alnum:]]+)(\1)+', '\1') AS result FROM dual;
5us2dqdw1#
你的查询基本上是正确的,但是它会从单词中删除双字母,单词的重复部分(比如banana-〉bana)。你可以用这样的东西
banana
bana
SELECT REGEXP_REPLACE('apple-HenryHenry(Male)-SunnySunny(Female)-apple', '(^|\W)(\w+)\2+(\W|$)', '\1\2\3') AS result FROM dual;
这里(^|\W)(\w+)\2+(\W|$)匹配由非单词符号或字符串边界包围的单词,这些单词由两个或更多相等的部分组成。这并不理想,因为它会修改haha-〉ha。如果保证重复单词的两个部分都以大写字母开头,可以使用(^|\W)([A-Z]\w*)\2+(\W|$)。
(^|\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|$)', '\1\2\3') AS result FROM dual; -- Outputs: bananabanana-Henry(Male)-Sunny(Female)-apple
1条答案
按热度按时间5us2dqdw1#
你的查询基本上是正确的,但是它会从单词中删除双字母,单词的重复部分(比如
banana
-〉bana
)。你可以用这样的东西
这里
(^|\W)(\w+)\2+(\W|$)
匹配由非单词符号或字符串边界包围的单词,这些单词由两个或更多相等的部分组成。这并不理想,因为它会修改
haha
-〉ha
。如果保证重复单词的两个部分都以大写字母开头,可以使用(^|\W)([A-Z]\w*)\2+(\W|$)
。