2010-11-03 30 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]+=''''[,]*', ''), '[, ]+;', ';')