2010-11-03 66 views
1

請假設你已經存儲在VARCHAR2下面的語句:如何使用正則表達式簡化此語句?

UPDATE PLUTO SET FIELD1='',FIELD2='',FIELD3='TIGER',FIELD4='',FIELD5='SCOTT'; 

我想編寫一個正則表達式,它簡化了前面的語句,通過刪除所有的更新設置爲NULL,因爲它們是無用的(NULL是默認聲明),如下所示:

UPDATE PLUTO SET FIELD3='TIGER', FIELD5='SCOTT'; 

你能幫我嗎?

我從來沒有這麼好的正則表達式...... !!

+5

要存儲一個數據庫查詢中一個數據庫? – Gumbo 2010-11-03 17:12:50

+0

是的! :-)另一個雞蛋裏面的雞蛋! :-) – UltraCommit 2010-11-05 14:00:24

回答

2
SELECT 
REGEXP_REPLACE(
REGEXP_REPLACE(
    'UPDATE PLUTO SET FIELD1='''',FIELD2='''',FIELD3=''TIGER'',FIELD4='''',FIELD5=''SCOTT'',FIELD9='''';', 
    '(FIELD[0-9]+=(?'''',*))','') , 
    '[, ]+;',';') 
from dual 

這個怎麼樣?它會刪除所有現場#=「」(有或沒有最終)

這裏是一個正則表達式小抄:Oracle的正則表達式 http://psoug.org/snippet.htm/Regular_Expressions_Regex_Cheat_Sheet_856.htm?PHPSESSID=7238be874ab99d0731a9da64f2dbafd8 和良好的資源 http://psoug.org/snippet/Regular-Expressions---REGEXP_REPLACE_882.htm

+1

這會留下尾隨的「,;」在行尾,如果最後一個字段爲空。 – Craig 2010-11-03 17:19:50

+1

@craig,感謝它的更正 – Harrison 2010-11-03 17:27:21

+0

非常感謝您的解決方案! ;-) – UltraCommit 2010-11-04 10:28:50

1

我相信這應該得到你想要的東西,但也有可能是一個更好的辦法,因爲我不跟正則表達式的最好的之一:

regexp_replace(regexp_replace(field, 'FIELD[0-9]+=''''[,]*', ''), '[, ]+;', ';')