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

2ledvvac  于 2023-11-17  发布在  Oracle
关注(0)|答案(4)|浏览(115)

我有一个列,其值如下:

1492966EMAIL1ABCDEFGHIJK12/22/2012 04:20:35

字符串
我想在列中替换EMAIL1之后的整个部分,这必须在超过500000行中完成。问题是EMAIL1之前的位数在所有行中并不常见,但EMAIL1值在所有行中都存在。我无法找到正确的函数来实现这一点,因为我已经尝试使用substr和trim,但我无法得到正确的查询。
有人能告诉我如何在Oracle SQL中实现这一点吗?如果需要更多细节,请告诉我。

ccgok5k5

ccgok5k51#

这正是你的目的,

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

字符串
小提琴演示
获取'EMAIL1'后面的字符串并替换它所需的字符串,

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


演示

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%';


更新演示

c2e8gylq

c2e8gylq2#

我希望你的要求是连接一个字符串后email1..为这个子字符串的位置,直到email1和串联与您所需的字符串。

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

字符串

vuktfyat

vuktfyat3#

看起来你可以在下面使用函数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

vnjpjtjt

vnjpjtjt4#

  • 使用**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)

相关问题