0

我有一列的值如下:

1492966EMAIL1ABCDEFGHIJK12/22/2012 04:20:35

我想替换列中 EMAIL1 之后的整个部分,并且必须对超过 500000 行执行此操作。问题是 EMAIL1 之前的位数在所有行中并不常见,但值 EMAIL1 在所有行中都存在。我尝试使用 substr 和 trim 时找不到正确的函数来解决这个问题,但我无法获得正确的查询。

有人可以告诉我如何在 Oracle SQL 中实现这一点吗?让我知道是否需要更多细节。

4

4 回答 4

1

这将完全符合您的目的,

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

更新演示

于 2012-12-22T12:09:39.170 回答
1

我希望您的要求是在 email1 之后连接一个字符串..对于这个子字符串位置直到 email1 并与您所需的字符串连接..

select SUBSTR(column_name,1,INSTR(column_name,'EMAIL1')+5)||'string' from table1
于 2012-12-22T15:06:49.667 回答
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)
于 2012-12-22T12:10:52.153 回答
0

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

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

请参阅带有演示的 SQL Fiddle

您的最终价值将是:

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

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

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

请参阅带有演示的 SQL Fiddle

于 2012-12-22T12:13:40.187 回答