2

データベースをあるサーバーから別のサーバーに移動していて、そこに大量のシリアル化されたデータがあります。だから、私は疑問に思っています:

regex次のような(および同様の)すべての出現を置き換えるために使用することは可能ですか

s:22:\"http://somedomain.com/\"  
s:26:\"http://somedomain.com/abc/\" 
s:29:\"http://somedomain.com/abcdef/\"

s:27:\"http://someOtherdomain.com/\"  
s:31:\"http://someOtherdomain.com/abc/\"  
s:34:\"http://someOtherdomain.com/abcdef/\"  
4

1 に答える 1

1

これらのデータを保持するその列が同じ長さであり、これらのオカレンス22, 26, 29,...が文字列の先頭から同じ位置にある場合。次に、SQL Server の場合、 を使用REPLACESUBSTRINGCHARINDEXそれを行うことができます。

DECLARE @s VARCHAR(50);
DECLARE @sub INT;
SET @s = 's:27:\"http://somedomain.com/\"';
SET @sub = CONVERT(INT, SUBSTRING(@s, CHARINDEX(':', @s) + 1, 2));
SELECT REPLACE(REPLACE(@s, 'somedomain', 'someOtherdomain'), @sub, @sub + 5);

s:number:\"http://somedomain.com/\"となりますs:number + 5:\"http://someOtherdomain.com/\"

そのテーブルに対してを実行したい場合は、次のUPDATEように記述できます。

UPDATE @t 
SET s = REPLACE(REPLACE(s, 'somedomain', 'someOtherdomain'), 
            CONVERT(INT, SUBSTRING(s, CHARINDEX(':', s) + 1, 2)),
            CONVERT(INT, SUBSTRING(s, CHARINDEX(':', s) + 1, 2)) + 5);

このクエリが行うことは、の出現を検索して にsomedomain置き換えsomeOtherdomain、最初の 2 つの間の数値を取得し、:それを に変換しINTて同じ数値に置き換えること + 5です。前のクエリを実行した後のデータは次のようになります。

s:27:\"http://someOtherdomain.com/\"
s:31:\"http://someOtherdomain.com/abc/\"
s:34:\"http://someOtherdomain.com/abcdef/\"

これがライブデモです。

于 2012-09-16T10:22:48.953 に答える