【问题标题】:Replace multiple strings in Oracle [duplicate]替换Oracle中的多个字符串[重复]
【发布时间】:2015-09-23 07:02:59
【问题描述】:

我必须从字符串中删除一组特定的单词。
例如。需要从employee_description 中删除以下字词(哦,啊等)。
我尝试过以下查询:

SELECT REPLACE(REPLACE(emp_desc, 'aah', ''), 'ooh', '')
from TEST_Table;

一切正常。

但是有没有其他最好的方法来做到这一点。

【问题讨论】:

  • 您所说的“最佳方式”究竟是什么意思?这个查询慢吗?或者还有其他原因让您寻找“最佳方式”。
  • @NicholasKrasnov:我猜 OP 不想在每个模式上调用 replace..
  • @PrakashBaskaran,定义“最佳”。你在做什么很好。什么问题,查询慢吗?此外,您可能希望修剪输出中的额外空格。

标签: sql oracle replace


【解决方案1】:

你可以试试regexp_replace:

select regexp_replace(emp_desc, 'aah|ooh', '') from TEST_Table;

SQLFiddle

【讨论】:

  • 请记住,REGEXP_REPLACE并不比REPLACE。它会消耗更多的 CPU。
【解决方案2】:

但是有没有其他最好的方法来做到这一点。

定义“最佳”。我认为您的查询很好,除非您遇到任何性能问题。顺便说一句,REGEXP_REPLACE 的操作成本更高,并且比传统的REPLACE 慢。正则表达式是 CPU 密集型操作,虽然随着新版本的发布,性能差异正在缩小,但它们仍然比传统函数慢。

顺便说一句,您可能希望在替换字符串后TRIM多余的空间。

SQL> column str format a5
SQL> WITH DATA(emp_desc) AS(
  2  SELECT 'scott aah' FROM dual UNION ALL
  3  SELECT 'allen ooh' FROM dual
  4  )
  5  SELECT TRIM(REPLACE(REPLACE(emp_desc,'aah'),'ooh')) str FROM DATA;

STR
-----
scott
allen

SQL>

【讨论】:

  • 感谢您的回复拉利特..
  • @PrakashBaskaran 不客气。请将其标记为已回答,将对其他人有所帮助。另外,请就您的问题回复上述 cmets。
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多