我怎样才能在 table 列中 replace/delete 字符串的很长部分?

How can I replace/delete a very long part of a string in a table column?

今天早上我发现我的 SQL Server 2016 数据库中的一列不知何故已损坏。

我有大约 900 行带有这个看起来很奇怪的字符串的变体:

<p>PC Gaming is central part of youth culture these days.</p><p> Let's examine this photo.</p> <img src="data:image/tiff;base64,GHFFFIFRHR////雙節棍/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////ZBRE/////RE//VWKYH//////////////////////

使用这个的网络应用程序在遇到这样的值时崩溃。

所以我正在寻找一种方法来从我的 table.

中删除字符串

我看到的唯一模式是它们都以 <img src="data:image/tiff;base64 开头并以至少两个斜杠结尾,例如... //

字符数量可变,从 20 一直到 5000!

table 列的类型为 nvarchar(MAX)

我知道如何替换的唯一方法是这样的:

UPDATE myTable 
SET myColumn = REPLACE(myColumn, '<img src="data:image/tiff;base64', '')
WHERE someColumn LIKE '%<img src="data:image/tiff;base64'

但这只会替换字符串的 <img src="data:image/tiff;base64 部分。

有没有其他方法可以替换这样的东西?

谢谢!

这是一些示例数据:

INSERT INTO myTable(myText) VALUES('<p>The efficiency we have at removing trash has made creating trash more acceptable.</p><img src="data:image/tiff;base64,GHFFFIFRHR////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////ZBRE/////RE//VWKYH//////////');
INSERT INTO myTable(myText) VALUES('<p>Edith could decide if she should paint her teeth or brush her nails.</p><img src="data:image/tiff;base64,GGHRTHTRH////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////FGSS/////RE//GNDRG////');
INSERT INTO myTable(myText) VALUES('<p>Before he moved to the inner city, he had always believed that security complexes were psychological.</p><img src="data:image/tiff;base64,VNDFGSTGV////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////ZBRE/////RE//JKSEFSE//////////////');
INSERT INTO myTable(myText) VALUES('<p>The rain pelted the windshield as the darkness engulfed us.</p><img src="data:image/tiff;base64,HJHNDFGFGX////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////JKYR/////RE//RTYGHTR//////////////////////');
INSERT INTO myTable(myText) VALUES('<p>The ants enjoyed the barbecue more than the family.</p><img src="data:image/tiff;base64,GDFGSFEFG////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////XCWED/////RE//SDFRHUK//////////');
INSERT INTO myTable(myText) VALUES('<p>That was how he came to win  million.</p><img src="data:image/tiff;base64,ERQWDWJMJKL////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////HTHS/////RE//SDFFGRR///////');
INSERT INTO myTable(myText) VALUES('<p>The Guinea fowl flies through the air with all the grace of a turtle.</p><img src="data:image/tiff;base64,HHJYJHCBF////雙節棍/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////OLIO/////RE//GEWFSDF/////////////');
INSERT INTO myTable(myText) VALUES('<p>She found his complete dullness interesting.</p><img src="data:image/tiff;base64,FGHGBEDRGBG////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////SFAW/////RE//WERHHEER//////////////');
INSERT INTO myTable(myText) VALUES('<p>His son quipped that power bars were nothing more than adult candy bars.</p><img src="data:image/tiff;base64,GNFGJHRYN////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////DSFQ/////RE//DFWERH///////////////////');
INSERT INTO myTable(myText) VALUES('<p>The beauty of the sunset was obscured by the industrial cranes.</p><img src="data:image/tiff;base64,BNFHNN BN////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////REQW/////RE//FDSDFSDF////////////');

For row 1, I need to delete or replace the string, "<img src="data:image/tiff;base64,GHFFFIFRHR////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////ZBRE/////RE//VWKYH//////////" with nothing For row 2, I need to delete or replace the string, "<img src="data:image/tiff;base64,GGHRTHTRH////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////FGSS/////RE//GNDRG////" with nothing For row 3, I need to delete or replace the string, "<img src="data:image/tiff;base64,VNDFGSTGV////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////ZBRE/////RE//JKSEFSE//////////////" with nothing For row 4, I need to delete or replace the string, "<img src="data:image/tiff;base64,HJHNDFGFGX////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////JKYR/////RE//RTYGHTR//////////////////////" with nothing For row 5, I need to delete or replace the string, "<img src="data:image/tiff;base64,GDFGSFEFG////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////XCWED/////RE//SDFRHUK//////////" with nothing For row 6, I need to delete or replace the string, "<img src="data:image/tiff;base64,ERQWDWJMJKL////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////HTHS/////RE//SDFFGRR///////" with nothing For row 7, I need to delete or replace the string, "<img src="data:image/tiff;base64,HHJYJHCBF////雙節棍/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////OLIO/////RE//GEWFSDF/////////////" with nothing For row 8, I need to delete or replace the string, "<img src="data:image/tiff;base64,FGHGBEDRGBG////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////SFAW/////RE//WERHHEER//////////////" with nothing For row 9, I need to delete or replace the string, "<img src="data:image/tiff;base64,GNFGJHRYN////鐳射洗衣/////兩節///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////DSFQ/////RE//DFWERH///////////////////" with nothing For row 10, I need to delete or replace the string, "<img src="data:image/tiff;base64,BNFHNN BN////雙節棍/////軚垂直升降連鐳///武術緣分風油/769P/++vb//vv3//77+P/軚垂直升降連鐳射洗衣乾衣腐蝕性氣墊毛筆//////如染色质免疫共沉淀芯片技术/武術緣分風油軚////////垂直升降連鐳射洗衣乾衣腐蝕性氣墊//////REQW/////RE//FDSDFSDF////////////" with nothing

请尝试以下解决方案。

我假设不需要的部分总是在列值的末尾。

如果一切正常,很容易将其转换为UPDATE语句。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, htmldata NVARCHAR(MAX));
INSERT INTO @tbl (htmldata) VALUES
(N'<p>PC Gaming is central part of youth culture these days.</p><p>Let''s examine this photo.</p><img src="data:image/tiff;base64,GHFFFIFRHR////雙節棍////"/>'),
(N'<p>Edith could decide if she should paint her teeth or brush her nails.</p><img src="data:image/tiff;base64');
-- DDL and sample data population, end

DECLARE @searchFor NVARCHAR(40) = N'<img src="data:image/tiff;base64';

SELECT * 
    , LEFT(htmldata, CHARINDEX(@searchFor, htmldata) - 1)
FROM @tbl;

@Yitzhak Khabinsky 先于我,这很好,因为我误解了要求。 我无论如何都会包括我的解决方案,因为它演示了如何从字符串中清除汉字,同时保持其余部分不变。使用的函数是PatReplace8k.

--==== Using this parameter, all alphanumberic characters, spaces, dots, etc 
--     are preserved, the rest are removed
DECLARE @cleanup VARCHAR(50) = '[^a-zA-Z0-9;,.:="<> ]'; -- Custom cleanup string

-- UPDATE mytable SET myText = CONCAT(s.S1,pr.newString)
SELECT NewString = CONCAT(s.S1,pr.newString)
FROM   mytable AS t
CROSS APPLY (VALUES(CHARINDEX('<img src=', t.myText), LEN(t.myText)))  AS f(Idx,Ln)
CROSS APPLY (VALUES(SUBSTRING(t.myText,0,f.Idx),
                    SUBSTRING(t.myText,f.Idx,LEN(t.mytext))))          AS s(S1,S2)
CROSS APPLY patreplace8k(s.S2,'[^a-zA-Z0-9;,.:="<> ]','') AS pr;

Returns:

NewString
--------------------------------------------------------------------------------------------------------------------------------------------------------
<p>The efficiency we have at removing trash has made creating trash more acceptable.</p><img src="data:imagetiff;base64,GHFFFIFRHR769Pvbvv377PZBREREVWKYH
<p>Edith could decide if she should paint her teeth or brush her nails.</p><img src="data:imagetiff;base64,GGHRTHTRH769Pvbvv377PFGSSREGNDRG
<p>Before he moved to the inner city, he had always believed that security complexes were psychological.</p><img src="data:imagetiff;base64,VNDFGSTGV769Pvbvv377PZBREREJKSEFSE
<p>The rain pelted the windshield as the darkness engulfed us.</p><img src="data:imagetiff;base64,HJHNDFGFGX769Pvbvv377PJKYRRERTYGHTR
<p>The ants enjoyed the barbecue more than the family.</p><img src="data:imagetiff;base64,GDFGSFEFG769Pvbvv377PXCWEDRESDFRHUK
<p>That was how he came to win  million.</p><img src="data:imagetiff;base64,ERQWDWJMJKL769Pvbvv377PHTHSRESDFFGRR
<p>The Guinea fowl flies through the air with all the grace of a turtle.</p><img src="data:imagetiff;base64,HHJYJHCBF769Pvbvv377POLIOREGEWFSDF
<p>She found his complete dullness interesting.</p><img src="data:imagetiff;base64,FGHGBEDRGBG769Pvbvv377PSFAWREWERHHEER
<p>His son quipped that power bars were nothing more than adult candy bars.</p><img src="data:imagetiff;base64,GNFGJHRYN769Pvbvv377PDSFQREDFWERH
<p>The beauty of the sunset was obscured by the industrial cranes.</p><img src="data:imagetiff;base64,BNFHNN BN769Pvbvv377PREQWREFDSDFSDF