2010-08-24 5 views
0

У меня есть 500 записей в таблице. один столбец содержит все html-данные. так, например, - html> body> .../body>/html>. Что я хочу сделать, это найти и заменить. У меня есть этот тег в каждой записи - <table id="something something" /> Я хочу заменить это во всех строках <table id="" /> теперь сложная часть - это все что-то другое для каждого альта. Таким образом, единственным общим тегом является «table id =». как можно найти здесь замену?заменить строку в sql

+0

Что вы пытаетесь заменить? Я думаю, что теги не позволили вашему сообщению выйти правильно. –

+0

Да, я отредактировал, чтобы показать теги. –

+1

Какие СУБД вы используете? –

ответ

3

Попробуйте это (предполагается, что только один «идентификатор таблицы» встречается в каждом):

declare @TestTable table (
    html_data varchar(100) 
) 

insert into @TestTable 
    (html_data) 
    select '<html><body><table id="something something" /></body></html>' 
    union all 
    select '<html><body><table id="something different" /></body></html>' 

select html_data from @TestTable 

update t 
    set html_data = LEFT(t.html_data, CHARINDEX('<table id="', t.html_data)-1) 
        + '<table id="" />' 
        + RIGHT(t.html_data, LEN(t.html_data) - CHARINDEX(' />', t.html_data, CHARINDEX('<table id="', t.html_data)) - 2) 
     from @TestTable t 

select html_data from @TestTable 

EDIT: на основе обратной связи в комментариях ниже, этот модифицированный код должен работать.

declare @TestTable table (
    html_data varchar(100) 
) 

insert into @TestTable 
    (html_data) 
    select '<html><body><table id="xxx"><tr><td></td></tr></table>... </body></html>' 

select html_data from @TestTable 

update t 
    set html_data = LEFT(t.html_data, CHARINDEX('<table id="', t.html_data)-1) 
        + '<table id="">' 
        + right(t.html_data, LEN(t.html_data) - CHARINDEX('>', t.html_data, CHARINDEX('<table id="', t.html_data))) 
     from @TestTable t 

select html_data from @TestTable 
+0

он добавил «

» перед существующим «
«Хорошо выглядит до сих пор, но как я могу удалить существующие или заменить существующие? – reffer

+0

Можете ли вы опубликовать строку html, которую вы тестируете? –

+0

<идентификатор таблицы = "ххх">

... подробнее столы и ТР и ТД.. , так что это 1 строка в поле html таблицы в sql-сервере. Надеюсь, что ответы. спасибо за всю помощь – reffer

0

Для этого вам потребуется написать хранимую процедуру, комбинацию оператора SELECT для поиска и оператора UPDATE для замены.

+0

логически я знаю, как это сделать. кто знает. У вас есть пример синтаксиса, который мне нужно использовать? если нет, просьба не отвечать на этот вопрос – reffer

4

Используйте REPLACE function:

UPDATE YOUR_TABLE 
    SET html_data = REPLACE(html_data, 
          '<table id="something something" />', 
          '<table id="" />') 

трудная часть это все «что-то что-то» различен для каждого альт.

SQL Server 2005+ имеет функциональность CLR, которую необходимо использовать для создания функции замены регулярных выражений, чтобы быть более удобным в качестве одного запроса. См. this page for both a downloadable script, and the source code.

Для версий SQL Server до этого вам может быть лучше получить контент в текстовом файле &, обновляя содержимое через regex/etc, для перезаписи существующего контента.

+0

OP ищет универсальное решение, в котором идентификатор таблицы может быть различным в каждом случае. –

+0

@JacobM: На мой вопрос отвечает ... –

+0

Да. Когда я сделал этот комментарий, я не сделал этого, и я заменил свой нисходящий удар. –

1

Если вы пишете функцию курсора, чтобы пройти через каждую строку таблицы (очень неэффективное, но я предполагаю, что вы только делаете это один раз?)

затем сделать замену на эту строку:

SELECT REPLACE(@HTMLText,'table id="%" />','table id=""'); 

Я думаю, что должен делать то, что вам нужно, и здесь основная функциональность курсора, если вам это нужно: http://blog.sqlauthority.com/2007/01/01/sql-server-simple-example-of-cursor/

EDIT: на самом деле, я испытал немного больше, и я не могу заставить его принять подстановочный знак, хотя он не жалуется, я не вижу его работоспособным ...

+0

Мне нравится эта идея, но почему-то ничего не произошло. он вернулся с существующей строкой, которая была до замены. – reffer

+0

это мой синтаксис - выберите REPLACE (html, 'table id = "%" />', 'table id = ""') из статей где id = 101 .. html - это имя поля. – reffer

+0

Да, извините, я думал, что у меня работает подстановочный знак, но, к сожалению, функция REPLACE() не принимает подстановочный знак ... – Brett

Смежные вопросы