0

次のような動的文字列を取得しました(ケースの1つ):

'DISTINCT type,NULL,DECODE(java_api_name,NULL,initlower(process(object_name)))
,NULL,field_description,NULL,NULL'

DECODE関数内以外の文字列の「,NULL」を削除したいです。これが私が望む結果です:

'DISTINCT type,DECODE(java_api_name,NULL,initlower(process(object_name)))
,field_description'

更新:これは単なる例です。ルールは次のようにする必要があります:中括弧に含まれていないNULLを削除します

どうすればこれを入手できますか?シンプルなほど良い。

4

3 に答える 3

0

これはあなたのために働くかもしれません:

SELECT 
    REGEXP_SUBSTR(line,
              '(.*\){3})')||
    REPLACE(SUBSTR(line,
            LENGTH(
            REGEXP_SUBSTR(line,
              '(.*\){3})'))),',NULL','')
FROM mystring;

ここで実際の動作を確認できます: http://sqlfiddle.com/#!4/288a4/13/0

これにより、最初に 3 秒で終わる部分が抽出され)ます。次に、文字列の他の部分で、出現するすべての を置き換えます,NULL

注:これは最も美しいソリューションではない可能性があり、より優れた正規表現 (先読みや後読みなど) を使用して実行できる可能性があります。文字列に 3)が発生する他の部分が含まれている場合、失敗する可能性があります。

于 2013-06-07T20:40:04.920 に答える
-1
SELECT  REGEXP_REPLACE(str, ',NULL', NULL, INSTR(str, 'NULL', 1) + 5) AS new_string
FROM
(
        SELECT  'DISTINCT DECODE(java_api_name,NULL,initlower(process(object_name))),NULL,field_description,NULL,NULL' AS str
        FROM    DUAL
)

結果:

DISTINCT DECODE(java_api_name,NULL,initlower(process(object_name))),field_description
于 2013-06-07T21:04:39.293 に答える