Чем лучший способ состоит в том, чтобы заменить весь '<' <
в данном столбце базы данных? В основном выполните s/<[^;]/</gi
Примечания:
<;;;;;;;;;
)Некоторое взламывание потребовало, но мы можем сделать это с КАК , , PATINDEX, УЕХАЛ И ПРАВО и старая добрая конкатенация строк.
create table test
(
id int identity(1, 1) not null,
val varchar(25) not null
)
insert into test values ('< <- ok, < <- nok')
while 1 = 1
begin
update test
set val = left(val, patindex('%<[^;]%', val) - 1) +
'<' +
right(val, len(val) - patindex('%<[^;]%', val) - 2)
from test
where val like '%<[^;]%'
IF @@ROWCOUNT = 0 BREAK
end
select * from test
Лучше то, что это - агностик версии SQL Server и должно работать просто великолепно.
Я думаю, что это может быть сделано намного более чистое при использовании другого МАТЕРИАЛА :)
create table test
(
id int identity(1, 1) not null,
val varchar(25) not null
)
insert into test values ('< <- ok, < <- nok')
WHILE 1 = 1
BEGIN
UPDATE test SET
val = STUFF( val , PATINDEX('%<[^;]%', val) + 3 , 0 , ';' )
FROM test
WHERE val LIKE '%<[^;]%'
IF @@ROWCOUNT = 0 BREAK
END
select * from test
Как насчет:
UPDATE tableName
SET columName = REPLACE(columName , '<', '<')
WHERE columnName LIKE '%lt%'
AND columnName NOT LIKE '%lt;%'
Редактирование:
я просто понял, что это проигнорирует столбцы с частично корректным <
строки.
В этом случае можно проигнорировать вторую часть, где пункт и называет это позже:
UPDATE tableName
SET columName = REPLACE(columName , '<;', '<')
Эта статья касается, как создать простую функцию Замены Regex, что можно использовать в SQL 2000 (и 2005 с простой тонкой настройкой), который может помочь Вам.
Если бы regex разновидность MSSQL поддерживает отрицательное предвидение, которое было бы Правильным Способом приблизиться к этому.
s/<(?!;)/</gi
поймает все экземпляры & лейтенант , которые не сопровождаются ; (даже если они не сопровождаются ничем, который [^;] отсутствовал бы), и не получает следующее не - ; символ как часть соответствия, устраняя проблему, упомянутую в комментариях к исходному вопросу того символа, потерянного в замене.
, К сожалению, я не использую MSSQL, таким образом, я понятия не имею, поддерживает ли он отрицательное предвидение или нет...