我有一個包含冗長HTML文本的列的SQL Server 2008表。在頂部附近提供了用於每個記錄獨有的關聯MP3文件的鏈接。這些鏈接都格式如下:SQL Server:刪除字符串內的重複文本
<div class="MediaSaveAs"><a href="filename??.mp3">Download Audio </a></div>
不幸的是多條記錄包含該鏈接的兩個或三個連續的和相同的情況下,人們應該只有一個。是否有一個相對簡單的腳本可以運行以查找並消除冗餘鏈接?
我有一個包含冗長HTML文本的列的SQL Server 2008表。在頂部附近提供了用於每個記錄獨有的關聯MP3文件的鏈接。這些鏈接都格式如下:SQL Server:刪除字符串內的重複文本
<div class="MediaSaveAs"><a href="filename??.mp3">Download Audio </a></div>
不幸的是多條記錄包含該鏈接的兩個或三個連續的和相同的情況下,人們應該只有一個。是否有一個相對簡單的腳本可以運行以查找並消除冗餘鏈接?
我不完全確定 - 因爲你的解釋不是很清楚 - 但這似乎是做你想做的,雖然不管你是否認爲這是一個「簡單的腳本」,我不知道。
declare @Link nvarchar(200) = N'<div class="MediaSaveAs"><a href="filename123.mp3">Download Audio </a></div>'
declare @BadData nvarchar(max) = N'cbjahcgfhjasgfzhjaucv' + replicate(@Link, 3) + N'cabhjcsghagj',
@StartPattern nvarchar(34) = N'<div class="MediaSaveAs"><a href="',
@EndPattern nvarchar(27) = N'">Download Audio </a></div>'
select @BadData
select replace (
@BadData,
substring(@BadData, charindex(@StartPattern, @BadData), len(@BadData)-charindex(reverse(@EndPattern), reverse(@BadData))-charindex(@StartPattern, @BadData) + 2),
substring(@BadData, charindex(@StartPattern, @BadData), charindex(@EndPattern, @BadData) + len(@EndPattern) - charindex(@StartPattern, @BadData))
)
我個人不希望維護這段代碼;我寧願使用另一種語言的腳本來實際解析HTML。你說這是「只是一個重複的文本問題」,但這並不意味着這是一個簡單的問題,特別是在TSQL這樣的語言中,對字符串操作的支持有限。
爲了將來的參考,請將所有相關信息放入問題中 - 如果需要,可以編輯它 - 而不是將它們留在難以閱讀並可能被忽略的註釋中。請發佈樣本數據和結果,而不是用文字描述。
感謝您的支持,我認爲這會奏效。 – user2367358 2013-05-09 23:30:13
我有功能類似這種在PostgreSQL
http://uz-expert.blogspot.com/2013/05/json-template-ning-tarkibidan.html
首先,我們需要明確的文件名,我們可以用PATINDEX做到:
select
substring(html, PATINDEX('%filename%.mp3%', html), PATINDEX('%.mp3%', html)-PATINDEX('%filename%.mp3%', html)+4)
from files
再其次識別和重複檢查:
delete
from files
where id not in (
select max(id)
from files
group by substring(html, PATINDEX('%filename%.mp3%', html), PATINDEX('%.mp3%', html)-PATINDEX('%filename%.mp3%', html)+4)
)
目前尚不完全清楚您的數據是什麼樣的或您需要什麼結果,但是您必須在TSQL中執行此操作嗎?對於使用文本來說,這是一種非常糟糕的語言,因此使用其他語言的腳本要容易得多。你可以編寫一個CLR程序,但是像Python或Perl這樣的語言可能更簡單,它具有用於解析HTML的庫。 – Pondlife 2013-05-09 18:57:33
謝謝 - 我幾乎限於我可以作爲SQL Mgmt Studio中的腳本運行;這幾乎只是一個重複的文本問題,它是HTML的事實可能並不重要。 – user2367358 2013-05-09 19:36:42
您仍然需要顯示一些示例數據:從您的問題中不清楚整個'div'類是否在列中重複出現,或者只有錨元素,或者只有文件名或其他。您還沒有說*爲什麼*您只能使用TSQL(或者您可以使用CLR過程);有了這些信息,人們可能會有一個完全不同的,更簡單的解 – Pondlife 2013-05-09 19:42:05