在更新中使用regexp_replace

时间:2013-01-10 09:29:05

标签: sql regex oracle

我有一个db列report_name,其值与此类似

000007091_PaymentRegisterReport _D x3A 975844_2012-12-26.XLS

我需要在所有具有XLS扩展名的PaymentRegisterReport中删除_D之前的空格。 有人可以帮我使用regex在update语句中使用regexp_replace函数吗?

3 个答案:

答案 0 :(得分:10)

您真的需要正则表达式来更新数据吗?请检查查询。

update TableName
set report_name=REPLACE(report_name, ' _D' , '_D')
WHERE report_name LIKE '%PaymentRegisterReport %' AND 
  report_name LIKE '%.XLS';

答案 1 :(得分:2)

您需要使用的表达式是

REGEXP_REPLACE(f1, '(.*)(_PaymentRegisterReport) _D (.*)(\.XLS)$', '\1\2_D\3\4')

我假设您可以通过'PaymentRegisterReport'识别报告类型,文件扩展名将为大写

答案 2 :(得分:2)

您可以使用select替换“_D”bi“_D”作为所述技术。

但是我写了一个regex_replace,正如你所要求的那样:

select regexp_replace('000007091_PaymentRegisterReport _D x3A 975844_2012-12-26.XLS','^(.*) _D(.*).XLS$','\1_D\2.XLS') from dual;