我有一列的值如下:
1492966EMAIL1ABCDEFGHIJK12/22/2012 04:20:35
我想替换列中 EMAIL1 之后的整个部分,并且必须对超过 500000 行执行此操作。问题是 EMAIL1 之前的位数在所有行中并不常见,但值 EMAIL1 在所有行中都存在。我尝试使用 substr 和 trim 时找不到正确的函数来解决这个问题,但我无法获得正确的查询。
有人可以告诉我如何在 Oracle SQL 中实现这一点吗?让我知道是否需要更多细节。
这将完全符合您的目的,
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%';
我希望您的要求是在 email1 之后连接一个字符串..对于这个子字符串位置直到 email1 并与您所需的字符串连接..
select SUBSTR(column_name,1,INSTR(column_name,'EMAIL1')+5)||'string' from table1
INSTR
函数查找字符串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)
似乎您可以使用以下功能REPLACE()
,SUBSTR()
并且INSTR()
:
select
replace(yourcol, substr(yourcol, instr(yourcol, 'EMAIL1')+6), '') newCol
from yourtable
您的最终价值将是:
| NEWCOL |
-----------------
| 1492966EMAIL1 |
然后,如果您要在UPDATE
语句中使用它,则查询将是:
update yourtable
set yourcol = replace(yourcol, substr(yourcol, instr(yourcol, 'EMAIL1')+6), '');