저는 데이터베이스의 전문가는 아니지만, 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;
는 사실, 당신은 아마 케이스 표현이 필요하지 않습니다 (안된)
'update' 쿼리의'where' 섹션 대신'case' 블록에서 '%'를 확인하는 특별한 이유가 있습니까? 어느 쪽도 인덱스를 사용하지 않을 것이므로 아마 빠르지 않을 것입니다. 그러나 단순히 "WHERE mycol LIKE" "%" ' – Wolph
TRIM()은 앞과 뒤의 "remstr"만 제거하는 것이 깔끔하게 보입니다. 나는 그가 그들을 모두 제거하고 싶다고 생각한다. – Anpher
@WoLpH : 당신 말이 맞을 것입니다. –