如何在Oracle中删除字符串的一部分

17

输入数据:

abcdef_fhj_viji.dvc

预期输出:

fhj_viji.dvc

需要修剪的部分不是固定的。


请查看SUBSTRINSTR函数。 - Noel
http://decipherinfosys.wordpress.com/2007/11/27/removing-un-wanted-text-from-strings-in-oracle/ - Gopesh Sharma
3
你没有提供足够的信息。你想要移除什么 - 字符串abcdef_?前7个字符?如果是 Abcdef_fhj_viji.dvc 呢? 如果是 abcdef_abcdef_fhj_viji.dvc 呢?请明确说明。 - Jeffrey Kemp
Jeffery提到,您需要提供不同的列值和期望结果集,这样才能更通用地提供解决方案。 - Pravin Satav
3个回答

25

使用REPLACE方法

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

如果您想对您的表格使用此查询:

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

更新:

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

REPLACE的第三个参数是可选的,如果是''或NULL,则不必要。例如,您可以轻松地使用REPLACE('abcdef_fhj_viji.dvc','abcde') - undefined

4
select substr('abcdef_fhj_viji.dvc',instr('abcdef_fhj_viji.dvc','_')+1) from dual

所以,一切都取决于INSTR函数,定义从哪个位置和哪个出现次数开始,您将获得索引并将该索引传递给SUBSTR以获取您的字符串。


1

由于您没有提供太多信息,我会做一些假设。

假设您想要删除某个字符串的前缀。使用正则表达式是一个不错的方法。有一个名为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]+_ 部分取决于前缀包含哪些字符。这里我只包括了大写和小写字母。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,