指定用一个值替换任何子字符串列表的正确方法是什么

What's the correct way to specify replacement of any of a list of substrings with one value

我正在尝试在 Teradata 中使用 REGEXP_REPLACE 将文本字段的部分值替换为 space。我只想构建一个大型目标列表,而不是将多个 REGEXP_REPLACE 彼此嵌套在一起,但到目前为止,我还没有找到一个示例来说明如何指定多个目标子字符串。

举个例子,如果我有值 Insulin Aspart Inj 100 Unit/ML 我希望正则表达式的目标部分指向 InjUnit、& ML 以便最后,REGEXP_REPLACE(当我在目标列表中包含 0-9\ 标记和包装 OREPLACE 以将双 space 与单个 space 交换时)应该将我的示例字符串缩减为 Insulin Aspart.

目前,我已经试过了

以及沿这些思路进行的其他一些排列。而且我知道这些示例不包括 ML 或 Unit;我没有添加它们,因为我无法让 INJ 部分正常工作。

那些 运行 每次都去掉 "INJ" 中的字母,而不是字符串 "INJ"(当特定排列可执行时)。

理想情况下,如果 REGEXP_REPLACE 的目标部分是一个逗号分隔的列表,其中用双引号将目标包裹起来指定的目标是字母组合而不是单个字母,我的代码将看起来像这样:

OREPLACE(REGEXP_REPLACE(UPPER(TRIM(DWI.GPI_Generic_Name)), '[0-9," INJ "," UNIT","ML",\]', ' ',1,0,'i'),' ', ' ')

您可以使用 |:

指定多个模式
RegExp_Replace(Upper(Trim(DWI.GPI_Generic_Name)), '(Inj|Unit|[0-9]+|ML|/)', '',1,0,'i')

如果用空字符串替换匹配项,则不需要 oReplace。