当我将Word中的内容粘贴到我网站上的表单时,我试图删除MS Office提供的其他标记列。
如何更新和替换and和
内部(包括)内容的出现这是我到目前为止所得到的:
UPDATE TABLE
SET myColumn = REPLACE(myColumn, SUBSTRING(myColumn, CHARINDEX('<!--[if gte mso', myColumn), CHARINDEX('<![endif]-->', myColumn)-1), '')
我的计划是执行此查询几次,直到所有事件都从列中消失。但是,当列没有出现任何问题时,我会遇到问题。
我猜这是因为我在子串中计算长度的方式......每次执行一些字符都会从列的开头删除。
我是否需要类似于case语句的内容来跳过没有MS Office内容的行?
谢谢,
答案 0 :(得分:0)
作为一个hacky更新你可以;
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