Удалить теги html из столбца - PullRequest
0 голосов
/ 16 января 2020

В моей таблице есть столбец, в котором хранится абзац, как показано ниже:

<p>I like it.</p>this is my job.<main>current.</main>

Я хочу удалить теги p , p , main и main и все теги между <</strong> и > . Поэтому мое ожидаемое значение будет выглядеть так:

I like it. this is my job. current.

Ответы [ 5 ]

4 голосов
/ 16 января 2020

, пожалуйста, попробуйте это

DECLARE @txt NVARCHAR(MAX) = '<p>I like it.</p>this is my job.<main>current.</main>'

SELECT x.value('.', 'NVARCHAR(MAX)') FROM ( SELECT x = 
CAST(REPLACE(REPLACE(@txt, '>', '/>'), '</', '<') AS XML) ) r

, это поможет удалить все теги

2 голосов
/ 16 января 2020

ОБНОВЛЕНИЕ: ответ Самира лучше, чем мой, поскольку он может иметь дело с html -хлам

(до тех пор, пока нет < или > с нормальным содержанием: -)

Вы можете попробовать это:

Если ваша строка действительна XML (имеется в виду XHTML), вы можете go этот маршрут:

DECLARE @yourString NVARCHAR(100)=N'<p>I like it.</p>this is my job.<main>current.</main>';

SELECT CAST(@yourString AS XML).value('.','nvarchar(max)');

возвращает

I like it.this is my job.current.

Использование . в качестве XPath вернет весь контент как есть ...

Любой недействительный XML (очень вероятно, с простым html) сломается это ...

2 голосов
/ 16 января 2020

Вы можете использовать гигантские REPLACE():

SELECT REPLACE(REPLACE(REPLACE(REPLACE(col, '<p>', ''), '</p>', ''), '<main>, ''), '</main>', '')

. Если вы работаете с последней версией SQL, то это будет легко написать, используя TRANSLATE():

SELECT TRANSLATE(col, '<p></p><main></main>', '')
1 голос
/ 16 января 2020

В итоге я воспользовался этой функцией:

CREATE FUNCTION [dbo].[clean] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
    WHILE @Start > 0 AND @End > 0 AND @Length > 0
    BEGIN
        SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
        SET @Start = CHARINDEX('<',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END
    RETURN LTRIM(RTRIM(@HTMLText))
END 
0 голосов
/ 16 января 2020

Если вы хотите удалить теги при выборе, вы можете сделать обычный SELECT и очистить строку:

SELECT column FROM my_table;
$value = $row["column"];
$value_replaced = str_replace('<p>', '', $value);
$value = $value_replaced;
$value_replaced = str_replace('</p>', '', $value);
$value = $value_replaced;
$value_replaced = str_replace('<main>', '', $value);
$value = $value_replaced;
$value_replaced = str_replace('</main>', '', $value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...