2010-06-02 34 views
0

我有一個包含6個列的表格,其中包含HTML內容及其中的一些標記,現在當移動到新設計的站點時,大部分此HTML代碼都必須被刪除。除了<B></B>之外或多或少的所有標籤。用於替換/刪除子字符串的SQL Server T-SQL語句

是否有一個很好的方法來做到這一點,確定所有標籤結束刪除它們在數據內?我確定在測試中沒有<>符號,所以正則表達式可能會起作用?

我的選擇是獲取每一行,處理它並更新數據庫,但我猜這是可以直接在T-SQL中執行的。

我的服務器是MSSQL 2008,位於託管環境中,但如果需要我可以獲取本地副本。

感謝, 斯特凡

+1

什麼版本的SQL Server?它支持CLR嗎? – 2010-06-02 08:20:50

回答

1

使用正則表達式從SQL 2000 http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx

而且從2005年SQL高達http://weblogs.sqlteam.com/jeffs/archive/2007/04/27/SQL-2005-Regular-Expression-Replace.aspx

修訂是最後一個環節給出了似乎從我的極其膚淺的測試工作正則表達式對於SQL2005 ,但僅適用於最多4000個字符的字符串

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlTypes; 
using Microsoft.SqlServer.Server; 
using System.Text.RegularExpressions; 

public partial class UserDefinedFunctions 
{ 
    [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic=true,IsPrecise=true)] 
    public static SqlString StripAllButBoldTags(SqlString expression) 
    { 
     if (expression.IsNull) 
      return SqlString.Null; 

     Regex r = new Regex("</?([a-z][a-z0-9]*[^<>]*)>", RegexOptions.IgnoreCase); 

     return new SqlString(r.Replace(expression.ToString(), new MatchEvaluator(ComputeReplacement))); 
    } 

    public static String ComputeReplacement(Match m) 
    { 
     return string.Compare(m.Groups[1].Value, "B",true) == 0? m.Value: ""; 
    } 
}; 
+0

我在託管環境中的服務器上執行此操作,但我的權限有限,我仍然可以執行他們正在討論的任務嗎? – StefanE 2010-06-02 08:52:50

+0

@Stefan。顯然取決於你的主人,但我想他們很可能不會讓你這樣做。另外,我對此有了一點發揮,發現當傳遞超過4000個字符的字符串時,它似乎悄無聲息地截斷了它們,所以我認爲你的建議在SQL Server之外完成是比較可取的! – 2010-06-02 09:13:32

+1

好的謝謝你的幫助! (而且我正在購買一本學習更高級SQL的書:)) – StefanE 2010-06-02 10:21:36