заменить строку в sql - PullRequest
       19

заменить строку в sql

0 голосов
/ 24 августа 2010

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

Ответы [ 4 ]

4 голосов
/ 25 августа 2010

Используйте функцию ЗАМЕНА :

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

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

SQL Server 2005+ имеет функциональность CLR, которую вам необходимо использовать для создания функции замены регулярных выражений, чтобы сделать ее более удобной в качестве отдельного запроса. См. на этой странице и для загружаемого скрипта, и для исходного кода .

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

3 голосов
/ 25 августа 2010

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

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

РЕДАКТИРОВАТЬ : этот модифицированный код должен работать на основе отзывов в комментариях ниже1006 *

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
1 голос
/ 25 августа 2010

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

Затем выполните замену для этой строки:

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

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

РЕДАКТИРОВАТЬ: На самом деле, я тестировал немного большеи я не могу заставить его принять подстановочный знак, хотя он не жалуется, я не вижу, как он функционирует должным образом ...

0 голосов
/ 25 августа 2010

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

...