使用SQL更新和替换MS Office格式

时间:2011-08-05 12:59:21

标签: sql sql-server-2005

当我将Word中的内容粘贴到我网站上的表单时,我试图删除MS Office提供的其他标记列。

如何更新和替换and和

内部(包括)内容的出现

这是我到目前为止所得到的:

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

我的计划是执行此查询几次,直到所有事件都从列中消失。但是,当列没有出现任何问题时,我会遇到问题。

我猜这是因为我在子串中计算长度的方式......每次执行一些字符都会从列的开头删除。

我是否需要类似于case语句的内容来跳过没有MS Office内容的行?

谢谢,

1 个答案:

答案 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