소개
쉼표로 구분된 값에서 개별 값 추출 문자열은 데이터 분석의 일반적인 요구 사항입니다. SQLite에는 SQL의 SubString() 함수에 해당하는 간단한 함수가 없으므로 이 작업이 다소 까다롭습니다. 하지만 공통 테이블 표현식(CTE)의 도움으로 효율적이고 직관적인 솔루션을 만들 수 있습니다.
해결책: CTE 사용
CTE를 사용하면 임시 결과 세트를 정의하고 이름을 지정합니다. CTE 내의 재귀를 활용하면 쉼표로 구분된 문자열을 반복적으로 구문 분석하여 각 값을 한 번에 하나씩 추출할 수 있습니다.
이 경우 CTE 선언은 다음과 같습니다.
WITH split(word, csv) AS ( -- 'initial query' (see SQLite docs linked above) SELECT '', 'Auto,A,1234444'||',' -- 'recursive query' UNION ALL SELECT substr(csv, 0, instr(csv, ',')), substr(csv, instr(csv, ',') + 1) FROM split WHERE csv != '' )
'초기 쿼리'에서는 CTE의 재귀 부분에 대한 시작점을 만듭니다. '단어'에 대해 빈 문자열을 지정하고 추가 쉼표와 함께 쉼표로 구분된 문자열을 추가하여 CSV의 끝을 나타냅니다.
'재귀 쿼리'에서 마법이 일어납니다. instr() 함수를 사용하여 'csv' 필드에서 첫 번째 쉼표의 위치를 찾습니다. 그런 다음 substr()을 사용하여 'csv' 필드를 '단어'와 나머지 'csv' 부분으로 분할합니다.
재귀를 사용하여 더 이상 쉼표가 남지 않을 때까지 나머지 'csv' 부분을 계속 분할합니다. , 쉼표로 구분된 모든 값을 효과적으로 추출합니다.
분할 검색 값
CTE가 분할 값을 정의하면 간단한 쿼리를 사용하여 이를 검색할 수 있습니다.
SELECT word FROM split WHERE word!='';
WHERE 절은 초기 및 분할 값을 나타내는 빈 문자열을 필터링합니다. 터미널 값.
출력 및 이점
쿼리 출력은 다음과 같습니다.
Auto A 1234444
이 접근 방식은 여러 가지 이점을 제공합니다.
위 내용은 공통 테이블 표현식을 사용하여 SQLite에서 쉼표로 구분된 값을 어떻게 쉽게 분할할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!