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

fiddle_demo

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

update_demo

于 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()and,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 に答える