我的列中包含以下值:
1492966EMAIL1ABCDEFGHIJK12/22/2012 04:20:35
我想在列中的EMAIL1之后替换整个部分,这必须超过500000行。问题是EMAIL1之前的位数在所有行中都不常见,但是EMAIL1的值在所有行中都存在。我无法找到正确的功能,因为我尝试使用substr和trim,但我无法得到正确的查询。
有人可以告诉我如何在Oracle SQL中实现这一目标吗?如果需要更多细节,请告诉我。
答案 0 :(得分: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%';
答案 1 :(得分:1)
我希望您的要求是在email1 ...之后将字符串连接到此子字符串位置,直到email1并连接到您需要的字符串..
select SUBSTR(column_name,1,INSTR(column_name,'EMAIL1')+5)||'string' from table1
答案 2 :(得分:0)
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)
答案 3 :(得分:0)
您似乎可以使用以下功能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), '');