2011-08-05 5 views
0

J'essaie de supprimer une colonne des balises supplémentaires fournies par MS Office lorsque vous collez du contenu de Word dans un formulaire sur mon site Web.METTRE À JOUR et REMPLACER le formatage MS Office avec SQL

Comment mettre à jour et remplacer les occurrences du contenu à l'intérieur (et incluant) le et?

Voici ce que j'ai jusqu'à présent:

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

Mon plan est d'exécuter cette requête plusieurs fois jusqu'à ce que toutes les occurrences sont passés de la colonne. Cependant, c'est quand la colonne n'a pas d'occurrences que je rencontre des problèmes.

Je suppose que c'est à cause de la façon dont je calcule la longueur dans la sous-chaîne ... Chaque fois que j'exécute quelques caractères sont supprimés du début de la colonne. Est-ce que j'ai besoin de quelque chose comme une déclaration de cas pour passer les lignes qui n'ont pas les trucs MS Office?

Merci,

+0

Remplacez donc tout ce qui correspond à ' '? –

+0

Ouais, c'est ce que je cherche à faire - je veux essentiellement m'en débarrasser ... –

Répondre

0

Comme une mise à jour hacky vous pourriez;

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 
Questions connexes