SQLite-문자열의 일부 교체


104

테이블 SQL에서 사용하여 SQLite문자열의 일부를 바꿀 수 있습니까?

예를 들어, 필드 중 하나에 파일 경로가있는 테이블이 있습니다. 예를 들어 문자열의 일부를 교체 할 수 있습니까?

c:\afolder\afilename.bmp

된다

c:\anewfolder\afilename.bmp

?

답변:


207

내장 replace()함수를 사용하여 쿼리에서 문자열 바꾸기를 수행 할 수 있습니다.

기타 문자열 조작 함수 (및 기타)는 SQLite 핵심 함수 목록에 자세히 설명되어 있습니다.

다음은 올바른 방향을 가리켜 야합니다.

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\' ) WHERE field LIKE 'C:\afolder\%';


6
WHERE 절은 필요하지 않지만 약간의 마음의 평화를 제공합니다. WHERE가 없으면 SqlLite는 테이블의 모든 행이 영향을 받았다고 알려줍니다. WHERE를 사용하면 잠재적으로 수천 개가 아닌 12 개 정도의 행만 얻을 수 있습니다.
Weston Wedding

2
@WestonWedding WHERE 절이있는 경우와없는 경우 쿼리 시간을 비교했습니다. 쿼리가 두 번 걸리는 곳없이.
Parag Bafna

참고로, 이것과 vladkras의 솔루션은 대소 문자를 구분합니다. 대소 문자를 구분하지 않도록 LIKE 문을 삽입하는 실험을했지만 제대로 작동하지 않았고 SQLite Replace 명령으로는 가능하지 않다고 생각합니다.
ShadowLiberal

감사. Darktable은 sqlite db를 사용하여 이미지 위치를 저장하므로 약 9000 개의 변경 사항이 저장되었습니다!
Phil

30

@Andrew 답변은 부분적으로 정확합니다. WHERE여기에 절 을 사용할 필요가 없습니다 .

  1. C:\afolder어쨌든 포함 된 필드 만 영향을받으며 확인할 이유가 없습니다. 과도합니다.
  2. 'C:\afolder\%'로 시작하는 필드 만 선택합니다 C:\afolder\. 문자열 안에이 경로가 있으면 어떨까요?

따라서 올바른 쿼리는 다음과 같습니다.

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\');

"필드"열에있는 모든 문자열의 문자열이 대체됩니까?
fifaltra

@fifaltra 예는 것
resedasue

파일 시스템 경로가 상대적인 경우 (절대 대신) 업데이트하려는 경우 replace ()를 사용하지 않는 것이 좋습니다. stackoverflow.com/questions/50161090/
NameZero912

10

지속적인 결과없이 쿼리에서 수행하려는 경우 :

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.