ОБНОВЛЕНИЕ и ЗАМЕНА MS Office форматирование с SQL - PullRequest
0 голосов
/ 05 августа 2011

Я пытаюсь удалить столбец из дополнительных тегов, которые MS Office предоставляет при вставке содержимого из Word в форму на моем веб-сайте.

Как обновить и заменить вхождения содержимого внутри (и в том числе) в и?

Вот что у меня так далеко:

UPDATE TABLE
SET myColumn = REPLACE(myColumn, SUBSTRING(myColumn, CHARINDEX('<!--[if gte mso', myColumn), CHARINDEX('<![endif]-->', myColumn)-1), '')

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

Полагаю, это из-за способа вычисления длины в подстроке ... Каждый раз, когда я выполняю, несколько символов удаляются из начала столбца.

Нужно ли что-то вроде оператора case, чтобы пропустить строки, в которых нет содержимого MS Office?

Спасибо

1 Ответ

0 голосов
/ 05 августа 2011

Как хакерское обновление вы могли бы;

 create table test(id int, myColumn varchar(500), newValue varchar(500) null)
 insert test values  
    (1, '<!--[if gte mso XXX>hello<![endif]-->', ''),
    (2, 'aaaaaaa', ''),
    (3, '123<!--[if gte mso XXX>hello<![endif]-->456', ''),
    (4, 'AA<!--[if gte mso 111>222<![endif]-->BB<!--[if gte mso 333>444<![endif]-->CC', '')

;with cte(id, stripped) as (
    select id, myColumn from test
    union all 
    select id, cast(stuff(stripped, charindex('<!--[if gte mso', stripped), charindex('<![endif]-->', stripped)-charindex('<!--[if gte mso', stripped)+len('<![endif]-->'), '') as varchar(500)) 
    from cte
    where charindex('<!--[if gte mso', stripped) > 0
)
update test 
    set test.newValue = cte.stripped
from test   
    inner join cte on cte.id = test.id
    where charindex('<!--[if gte mso', stripped) = 0

select * from test

>>
id  newValue
1   
2   aaaaaaa
3   123456
4   AABBCC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...