2

私は次のような文字列を持っています:

hheelllloo wwoorrlldd !! それは返すべきhello world!

上記の私の試みは

SELECT regexp_substr('hheelllloo wwoorrlldd !!', '.', LEVEL*2-1)l_val
FROM dual
CONNECT BY LEVEL <= LENGTH('hheelllloo wwoorrlldd !!')/2;

しかし、それは私が必要とする方法ではなく、ロジックが正しく使用されていません。私も使ってみました'(\w)\1'

サンプルデータでの私の期待される結果:

WITH t AS
     ( SELECT 'hheelllloo wwoorrlldd!!' AS word FROM dual
     UNION
     SELECT 'hellow world!' FROM dual
     UNION
     SELECT 'ootthheerrss' FROM dual
     UNION
     SELECT 'ootthheeerrss' FROM dual
     )
SELECT * FROM t;

出力は次のようになります。

 hello world!    --expression applied
 hellow world!     -- not needed for non-repeated characters
 others           --expression applied
 otheers          --applied and extra `e` considered as non-repeated.

単一のクエリで全体を作成できますか、それとも最初のクエリですか? 事前に感謝します。これは私の練習のためであり、さまざまなロジックを知るためのものです.

4

2 に答える 2

0
And
select regexp_replace('A;A;B;B', '(.)\1', '\1')
from `dual`

出力:

A;B ????????

私はこの答えを持っています。

于 2016-02-26T14:32:02.110 に答える