Sql server 用于替换/删除子字符串的SQL Server T-SQL语句

Sql server 用于替换/删除子字符串的SQL Server T-SQL语句,sql-server,tsql,Sql Server,Tsql,我有一个表,有6列,其中包含HTML内容和一些标记,现在当移动到一个新设计的网站时,大多数HTML代码都必须删除。除了和之外的几乎所有标记 是否有一种很好的方法,识别数据中的所有标记并删除它们?我确信测试中没有符号,所以正则表达式可能会起作用 我的选择是获取每一行,处理它并更新数据库,但我猜这可以直接在T-SQL中实现 我的服务器是MSSQL 2008,位于托管环境中,但如果需要,我可以获取本地副本 谢谢, Stefan使用SQL 2000中的正则表达式 从SQL2005开始 修改最后一个链接会

我有一个表,有6列,其中包含HTML内容和一些标记,现在当移动到一个新设计的网站时,大多数HTML代码都必须删除。除了
之外的几乎所有标记

是否有一种很好的方法,识别数据中的所有标记并删除它们?我确信测试中没有<>符号,所以正则表达式可能会起作用

我的选择是获取每一行,处理它并更新数据库,但我猜这可以直接在T-SQL中实现

我的服务器是MSSQL 2008,位于托管环境中,但如果需要,我可以获取本地副本

谢谢,
Stefan使用SQL 2000中的正则表达式

从SQL2005开始

修改最后一个链接会得到一个正则表达式,该正则表达式似乎在我对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: "";
    }
};
使用系统;
使用系统数据;
使用System.Data.SqlClient;
使用System.Data.SqlTypes;
使用Microsoft.SqlServer.Server;
使用System.Text.RegularExpressions;
公共部分类UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic=true,IsPrecise=true)]
公共静态SqlString StripAllButBoldTags(SqlString表达式)
{
if(expression.IsNull)
返回SqlString.Null;
Regex r=new Regex(“,RegexOptions.IgnoreCase);
返回新的SqlString(r.Replace(expression.ToString(),newMatchEvaluator(ComputerPlacement));
}
公共静态字符串计算机替换(匹配m)
{
返回字符串。比较(m.Groups[1]。值“B”,true)==0?m。值:“”;
}
};

什么版本的SQL Server?它支持CLR吗?我在托管环境中的服务器上执行此操作,在托管环境中我的权限有限,我仍然可以执行他们所说的吗?@Stefan。显然这取决于你的主人,但我想他们很可能不会让你这么做。此外,我还对此进行了一些研究,发现当传递超过4000个字符的字符串时,它似乎会悄悄地截断它们,所以总的来说,我认为您建议在SQL Server之外执行此操作更可取!好的,谢谢你的帮助!(我正在买一本书,学习更高级的SQL:)