2011-08-05 4 views
0

Wordのコンテンツを自分のWebサイトのフォームに貼り付けるときにMS Officeが提供する追加タグの列を取り除こうとしています。UPDATEとREPLACE SQLを使用したMS Officeの書式

andの中身の内容を更新して置き換えるにはどうすればよいですか?

は、ここで私はこれまで持っているものです:

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

私の計画は、すべてのオカレンスがカラムからなくなるまでこのクエリを数回実行することです。しかし、それは私が問題に遭遇しても何も起きていないときです。

サブストリングの長さを計算する方法が原因であると推測しています...実行する度に、いくつかの文字が列の先頭から削除されます。

MS Officeの機能を持たない行をスキップするには、case文のようなものが必要ですか?

ありがとう、

+0

<! - [if gte mso ??? '? –

+0

ええ、それは私が探していることです - 私は基本的にそれを取り除きたいです... –

答えて

0

ハッキーアップデートとして、

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 
関連する問題