如何在oracle中删除部分字符串

Posted

技术标签:

【中文标题】如何在oracle中删除部分字符串【英文标题】:How to remove part of the string in oracle 【发布时间】:2013-11-08 05:53:35 【问题描述】:

输入数据:

abcdef_fhj_viji.dvc

预期输出:

fhj_viji.dvc

要修剪的部分不是恒定的。

【问题讨论】:

看看SUBSTR和INSTR函数。 decipherinfosys.wordpress.com/2007/11/27/… 您没有提供足够的信息。您要删除什么 - 字符串 abcdef_?前 7 个字符?如果是Abcdef_fhj_viji.dvc 怎么办?如果是abcdef_abcdef_fhj_viji.dvc 怎么办? 添加 jeffery 提到您需要提供不同的列值集和预期结果,以便可以提供更通用的解决方案。 【参考方案1】:

使用REPLACE 方法

Select REPLACE('abcdef_fhj_viji.dvc','abcde','')

如果您希望为您的表格查询此查询

Select REPLACE(column,'abcde','') from myTable

对于更新

UPDATE TABLE
   SET column = REPLACE(column,'abcde','') 

【讨论】:

【参考方案2】:
select substr('abcdef_fhj_viji.dvc',instr('abcdef_fhj_viji.dvc','_')+1) from dual

所以,这完全取决于INSTR 函数,定义从哪个位置和哪个出现,您将获取索引并将该索引传递给SUBSTR 以获取您的字符串。

【讨论】:

【参考方案3】:

由于你没有提供很多信息,我会假设一些。

假设您希望删除某个字符串的前缀。一个很好的方法是使用正则表达式。有一个名为 regexp_replace 的函数,它可以根据模式找到字符串的子字符串,并将其替换为不同的字符串。在 PL/SQL 中,您可以使用 regexp_replace 为自己编写一个函数,如下所示:

function deletePrefix(stringName in varchar2) return varchar2 is
begin
  return regexp_replace(stringName, '^[a-zA-Z]+_', '');
end;

或者只是在普通的 sql 中使用它:

regexp_replace(stringName, '^[a-zA-Z]+_', '');

stringName 是您要处理的字符串,^[a-zA-Z]+_ 部分取决于前缀包含的字符。这里我只包含了大写和小写字母。

【讨论】:

以上是关于如何在oracle中删除部分字符串的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL——如何使用首选项删除部分重复项

Oracle SQL - 如何删除具有首选项的部分重复项

如何正确删除Oracle 归档日志文件

如何在oracle中删除破折号后的文本?

oracle中如何对system表空间进行清理?

如何根据包含的字符串的一部分选择列,然后在 R 中删除部分列名? (列位置可能不同)