Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Natalochka Member Откуда: Сообщений: 5 |
Нужна функция, которая убирает все тэги из строки. Пример: exec dbo.strip_tags '<br>При</br>ве<a>т</a>' функция возвращает : Привет мой текст функции: CREATE FUNCTION strip_tags (@Str varchar(max)) RETURNS varchar(max) as BEGIN DECLARE @iStart int, @iEnd int, @iLength int WHILE CHARINDEX('<',@Str) > 0 And CHARINDEX( '>', @Str, CHARINDEX('<',@Str)) > 0 BEGIN set @iStart = CHARINDEX('<',@Str) set @iEnd = CHARINDEX ( '>', @Str, CHARINDEX('<',@Str) ) set @iLength = ( @iEnd - @iStart) + 1 IF @iLength > 0 BEGIN set @iStart = SUBSTRING(@Str,@iLength,Len(@Str)) set @Str = @iStart End END RETURN @Str END вызываю её exec dbo.strip_tags '<br>При</br>ве<a>т</a>' Функция отрабатывает, но не выдает ничего. Подскажите ошибки, заранее благодарю. Сообщение было отредактировано: 28 апр 17, 13:31 |
28 апр 17, 13:26 [20443537] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Natalochka, я удивлён set @Str = @iStart |
28 апр 17, 13:32 [20443559] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9634 |
declare @x xml = '<br>При</br>ве<a>т</a>'; select @x.value('data(/)', 'varchar(max)'); |
||
28 апр 17, 13:34 [20443565] Ответить | Цитировать Сообщить модератору |
Шыфл Member Откуда: Прага Сообщений: 776 |
invm, логично, но в контексте вопроса автора всё же DECLARE @Str varchar(max)='<br>Pri</br>ve<a>t</a>' DECLARE @iStart int, @iEnd int, @iLength int WHILE CHARINDEX('<',@Str) > 0 And CHARINDEX( '>', @Str, CHARINDEX('<',@Str)) > 0 BEGIN set @iStart = CHARINDEX('<',@Str) set @iEnd = CHARINDEX ( '>', @Str, CHARINDEX('<',@Str) ) set @iLength = ( @iEnd - @iStart) + 1 IF @iLength > 0 BEGIN set @Str = SUBSTRING(@Str,1,@iStart-1) + SUBSTRING(@Str,@iEnd+1,LEN(@str)) End END select @Str |
28 апр 17, 13:41 [20443589] Ответить | Цитировать Сообщить модератору |
Rankatan Member Откуда: Сообщений: 250 |
declare @xml xml= '<br>При</br>ве<a>т</a>' select @xml.value('.','varchar(max)') |
28 апр 17, 13:52 [20443642] Ответить | Цитировать Сообщить модератору |
rnk Member Откуда: Сообщений: 126 |
TaPaK, Вот это ещё круче: set @iStart = SUBSTRING(@Str,@iLength,Len(@Str)) У меня оно вылетает на раз с сообщением: Conversion failed when converting the varchar value '>При</br>ве<a>т</a>' to data type int. invm, Не факт, что на вход будет подан валидный XML. Обычно код HTML-страничек очень «грязный» и не читается XML-парсерами. Грамотно было бы отсчитывать угловые скобки, чтобы <aaa<bbb>ccc> превращалось в пустую строку, а не в "ccc>". Ещё надо отдельно обрабатывать комменты и CDATA, надо что-то рещать с entities (например, &), в общем, развлекухи немало. Лучше бы подключить CLR-функцию с регулярными выражениями, или можно вообще через OLE Automation создать объект MSHTML.HTMLDocument, загрузить в него HTML и прочитать свойство innerText. |
28 апр 17, 13:54 [20443649] Ответить | Цитировать Сообщить модератору |
Natalochka Member Откуда: Сообщений: 5 |
Шыфл, Спасибо! |
28 апр 17, 14:30 [20443833] Ответить | Цитировать Сообщить модератору |
Natalochka Member Откуда: Сообщений: 5 |
Всем спасибо за помощь! |
28 апр 17, 14:31 [20443838] Ответить | Цитировать Сообщить модератору |
,
Guest |
declare @RegEx int declare @hr int declare @Source varchar(8000)='<a><br>При</br>ве<a>т</a><h1> Hi !</h2>' declare @Result varchar(8000) exec @hr=sp_OACreate 'vbscript.regexp', @RegEx output exec @hr=sp_OASetProperty @RegEx, 'Pattern', '<!*[^<>]*>' -- html tags and comments exec @hr=sp_OASetProperty @RegEx, 'Global', 1 exec @hr=sp_OASetProperty @RegEx, 'IgnoreCase', 1 exec @hr=sp_OASetProperty @RegEx, 'MultiLine', 1 exec @hr=sp_OAMethod @RegEx, 'Replace', @Result output, @Source, '' select @Result exec @hr=sp_OADestroy @RegEx |
28 апр 17, 14:35 [20443852] Ответить | Цитировать Сообщить модератору |
user89 Member Откуда: Сообщений: 2083 |
Удалить символы из строки по шаблону 12231849 |
28 апр 17, 18:57 [20444918] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |