> 데이터 베이스 > MySQL 튜토리얼 > 공통 테이블 표현식(CTE)을 사용하여 SQLite에서 쉼표로 구분된 값을 어떻게 분할할 수 있습니까?

공통 테이블 표현식(CTE)을 사용하여 SQLite에서 쉼표로 구분된 값을 어떻게 분할할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-31 22:01:17
원래의
723명이 탐색했습니다.

How Can I Split Comma-Separated Values in SQLite Using a Common Table Expression (CTE)?

SQLite에서 쉼표로 구분된 값 분할: CTE(공용 테이블 표현식) 접근 방식

데이터 관리 영역에서 분할된 쉼표로 구분된 값(CSV)이 자주 발생합니다. 널리 사용되는 경량 데이터베이스 시스템인 SQLite의 경우 전용 substring() 함수가 없기 때문에 이 작업이 다른 SQL 환경만큼 간단하지 않을 수 있습니다. 그러나 CTE(공용 테이블 표현식)를 활용하는 대체 솔루션이 있습니다.

다음 시나리오를 고려해 보겠습니다. 쉼표로 구분된 문자열이 포함된 "Category" 열이 있는 테이블이 있고 추출하려고 합니다. 각 문자열의 개별 값을 별도의 행으로 변환합니다.

CTE는 단일 쿼리 내에서 추가로 참조하고 조작할 수 있는 명명된 임시 결과 집합입니다. 우리의 경우 CTE를 사용하여 CSV 문자열을 재귀적으로 분할하고 추출된 값을 새 테이블에 저장할 수 있습니다. 쿼리는 다음과 같습니다.

WITH split(word, csv) AS (
  -- 'initial query'
  SELECT
    '',
    'Auto,A,1234444'||',' -- terminate with ',' indicating csv ending
  -- 'recursive query'
  UNION ALL SELECT
    substr(csv, 0, instr(csv, ',')), -- each word contains text up to next ','
    substr(csv, instr(csv, ',') + 1) -- next recursion parses csv after this ','
  FROM split -- recurse
  WHERE csv != '' -- break recursion once no more csv words exist
)
SELECT
  word
FROM
  split
WHERE
  word!=''; -- filter out 1st/last rows
로그인 후 복사

이 쿼리는 instr() 함수를 사용하여 CSV 문자열을 분할하여 첫 번째 쉼표를 찾고, 쉼표 앞의 하위 문자열을 추출하고, 자신을 재귀적으로 호출하여 나머지 부분에서 프로세스를 반복합니다. 문자열의. 쉼표가 더 이상 남지 않으면 재귀가 종료됩니다.

결과 출력에는 원본 CSV 문자열에서 추출된 개별 값이 행으로 구성되어 포함됩니다.

Auto
A
1234444
로그인 후 복사

이 접근 방식은 강력하고 SQLite에서 쉼표로 구분된 값을 분할하는 유연한 방법으로, 데이터 조작 작업에 유용한 도구입니다.

위 내용은 공통 테이블 표현식(CTE)을 사용하여 SQLite에서 쉼표로 구분된 값을 어떻게 분할할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿