2010-08-16 4 views
1

저는 데이터베이스의 전문가는 아니지만, PHP를 통해 대부분의 작업을 처리합니다 (내부 작업 인 경우에도 데이터 조작 같은 것). 그러나 PHP는이 경우별로 유용하지 않습니다. 나는 그 안에 약 4 천만 개의 레코드가있는 테이블을 가지고 있으며 16 열을 가지고 있습니다. 다른 모든 것은 잘 작동하지만 텍스트 파일에서이 테이블을 채 웁니다. 그리고이 텍스트 파일에는 큰 따옴표로 묶인 각 열의 값이 대부분 들어 있습니다. "United States of America" "London"데이터베이스 테이블의 모든 열에서 요소를 바꾸는 방법은 무엇입니까?

단일 쿼리 나 SQL 스크립트를 통해 이중 인용 부호를 찾을 수있는 위치를 제거하고 싶습니다. 나는 PHP와 str_replace 메소드를 시도했지만 분명히 레코드가 너무 커서 각 레코드에이 함수를 적용한 다음 각 값에 대해 2 개의 쿼리를 실행하기에는 너무 큽니다. 거기에 어떤 SQL 솔루션이있을 수 있습니까?

데이터베이스는 MySQL이며 엔진은 MyISAM에서 InnoDB로 전환 할 수 있습니다. 나는이 해결책을 여기에 보았습니다 : SQL: search for a string in every varchar column in a database하지만 확실하지 않은 경우 나를 위해 작동합니다. 감사.

update mytable set mycol = case 
    when mycol like '"%"' then trim(both '"' from mycol) 
    else mycol end; 

는 사실, 당신은 아마 케이스 표현이 필요하지 않습니다 (안된)

답변

2

:

update mytable set mycol = trim(both '"' from mycol)' 

를 반복하여 다른 컬럼에 대한 쿼리를, 또는 전부를 충당하기 위해이 일을 연장하여 열.

+0

'update' 쿼리의'where' 섹션 대신'case' 블록에서 '%'를 확인하는 특별한 이유가 있습니까? 어느 쪽도 인덱스를 사용하지 않을 것이므로 아마 빠르지 않을 것입니다. 그러나 단순히 "WHERE mycol LIKE" "%" ' – Wolph

+0

TRIM()은 앞과 뒤의 "remstr"만 제거하는 것이 깔끔하게 보입니다. 나는 그가 그들을 모두 제거하고 싶다고 생각한다. – Anpher

+0

@WoLpH : 당신 말이 맞을 것입니다. –

1

REPLACE() 잘 작동합니다.

UPDATE `table` SET `column` = REPLACE(`column`, '"', '') 
+0

이것은 모든'''을 대체 할 것이다. 그것이 보장이라고 말하지 않을 것입니다. – Wolph

관련 문제