Оператор SQL Server T-SQL для замены / удаления подстрок - PullRequest
0 голосов
/ 02 июня 2010

У меня есть таблица с 6 столбцами, содержащей контент HTML, с некоторыми пометками в нем, и теперь при переходе на новый дизайн сайта большая часть этого кода HTML должна быть удалена. Более или менее все теги, кроме <B> и </B>.

Есть ли хороший способ сделать это, определить все теги и удалить их в данных? Я уверен, что в тесте нет символов <>, поэтому может сработать регулярное выражение?

Моя альтернатива - извлекать каждую строку, обрабатывать ее и обновлять базу данных, но я предполагаю, что это можно сделать напрямую в T-SQL.

Мой сервер - MSSQL 2008 и находится в размещенной среде, но при необходимости я могу получить локальную копию.

Спасибо, Stefan

1 Ответ

1 голос
/ 02 июня 2010

Для использования регулярных выражений из SQL 2000 http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx

И с SQL 2005 до http://weblogs.sqlteam.com/jeffs/archive/2007/04/27/SQL-2005-Regular-Expression-Replace.aspx

Изменение последней ссылки дает Regex, который, похоже, работает из моего крайне поверхностного тестирования на 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: "";
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...