문제

모든 '<'를 대체하는 가장 좋은 방법은 무엇입니까? &lt; 주어진 데이터베이스 열에서? 기본적으로 수행합니다 s/&lt[^;]/&lt;/gi

메모:

  • 작업해야합니다 MS SQL Server 2000
  • 반복 가능해야합니다 (그리고 끝나지 않아야합니다 &lt;;;;;;;;;;)
도움이 되었습니까?

해결책

일부 해킹이 필요하지만 우리는 이것을 할 수 있습니다 처럼, Patindex, 왼쪽 그리고 오른쪽 그리고 좋은 오래된 문자열 연결.

create table test
(
    id int identity(1, 1) not null,
    val varchar(25) not null
)

insert into test values ('&lt; <- ok, &lt <- nok')

while 1 = 1
begin
    update test
        set val = left(val, patindex('%&lt[^;]%', val) - 1) +
                      '&lt;' +
                      right(val, len(val) - patindex('%&lt[^;]%', val) - 2)
    from test
    where val like '%&lt[^;]%'

    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 ('&lt; <- ok, &lt <- nok')

WHILE 1 = 1
BEGIN
    UPDATE test SET
        val = STUFF( val , PATINDEX('%&lt[^;]%', val) + 3 , 0 , ';' )
    FROM test
    WHERE val LIKE '%&lt[^;]%'

    IF @@ROWCOUNT = 0 BREAK
END

select * from test

어때요 :

    UPDATE tableName
    SET columName = REPLACE(columName , '&lt', '&lt;')
    WHERE columnName LIKE '%lt%'
    AND columnName NOT LIKE '%lt;%'

편집하다:

나는 이것이 부분적으로 정확한 열을 무시할 것이라는 것을 깨달았다. &lt; 문자열.

이 경우 WHERE 절의 두 번째 부분을 무시하고 이후에 전화 할 수 있습니다.

    UPDATE tableName
    SET columName = REPLACE(columName , '&lt;;', '&lt;')

이 기사 SQL 2000 (및 2005 년 간단한 조정)에서 사용할 수있는 간단한 Regex 교체 기능을 만드는 방법을 다루고 있습니다.

MSSQL의 REGEX 풍미가 부정적인 룩 하이드를 지원한다면, 이는 이에 접근하는 올바른 방법 일 것입니다.

s/&lt(?!;)/&lt;/gi

모든 인스턴스를 잡을 것입니다 < 뒤 따르는 것은 아닙니다 ; (아무것도 뒤 따르는 경우에도 [^;] 그리워 할 것입니다.); 성냥의 일부로 캐릭터 대체에서 손실 된 해당 캐릭터의 원래 질문에 대한 의견에 언급 된 문제를 제거합니다.

불행히도, 나는 MSSQL을 사용하지 않으므로 그것이 부정적인 룩보드를 지원하는지 여부를 모르겠습니다 ...

이 패턴에 매우 구체적이지만 과거에는 이와 비슷한 작업을 수행했습니다.

REPLACE(REPLACE(columName, '&lt;', '&lt'), '&lt', '&lt;')

더 넓은 예제 (제목 속성에서 부적절 할 수있는 문자 인코딩)

REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    columName
    -- Remove existing encoding:
    , '&amp;', '&')
    , '&#34;', '"')
    , '&#39;', '''')
    -- Reinstate/Encode:
    , '&', '&amp;')
    -- Encode:
    , '"', '&#34;')
    , '''', '&#39;')
    , ' ', '%20')
    , '<', '%3C')
    , '>', '%3E')
    , '/', '%2F')
    , '\', '%5C')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top