在oracle中的某些字符后替换列中的数据

时间:2012-12-22 12:02:21

标签: sql oracle

我的列中包含以下值:

1492966EMAIL1ABCDEFGHIJK12/22/2012 04:20:35

我想在列中的EMAIL1之后替换整个部分,这必须超过500000行。问题是EMAIL1之前的位数在所有行中都不常见,但是EMAIL1的值在所有行中都存在。我无法找到正确的功能,因为我尝试使用substr和trim,但我无法得到正确的查询。

有人可以告诉我如何在Oracle SQL中实现这一目标吗?如果需要更多细节,请告诉我。

4 个答案:

答案 0 :(得分:1)

这将完全符合你的目的,

Select SUBSTR(val,1,instr(val,'EMAIL1')+5) from table1

fiddle_demo

获取'EMAIL1'之后的字符串并将其替换为必需的字符串

Select replace(SUBSTR(val,instr(val,'EMAIL1')+5),
'String you want to replace','string that replaces')
from table1

demo

update table1 set val=(Select replace(SUBSTR(val,instr(val,'EMAIL1')+5),
'String you want to replace','string that replaces') from table1)
where lower(val) like '%email1%';

update_demo

答案 1 :(得分:1)

我希望您的要求是在email1 ...之后将字符串连接到此子字符串位置,直到email1并连接到您需要的字符串..

select SUBSTR(column_name,1,INSTR(column_name,'EMAIL1')+5)||'string' from table1

答案 2 :(得分:0)

  • 使用 INSTR 功能查找字符串 EMAIL1 的出现位置。
  • 从原始字符串的开头开始选择子字符串 EMAIL1 的起始位置加上6个字符。 6是 EMAIL1 子串的长度。

如果您想以这种方式选择

SELECT substr( column_name, 1, instr(column_name,'EMAIL1')+6)

如果要更新列值

UPDATE <table>
SET column_name = substr( column_name, 1, instr(column_name,'EMAIL1')+6)

答案 3 :(得分:0)

您似乎可以使用以下功能REPLACE()SUBSTR()INSTR()

select 
  replace(yourcol, substr(yourcol, instr(yourcol, 'EMAIL1')+6), '') newCol
from yourtable

请参阅SQL Fiddle with Demo

您的最终价值将是:

|        NEWCOL |
-----------------
| 1492966EMAIL1 |

然后,如果您要在UPDATE语句中使用它,则查询将为:

update yourtable
  set yourcol = replace(yourcol, substr(yourcol, instr(yourcol, 'EMAIL1')+6), '');

请参阅SQL Fiddle with Demo