각 행에 대한 레코드가 열과 같은 목록으로 기록되는 데이터베이스에 텍스트 열이있는 테이블이 있습니다 test
.
[['a','1'],['b','2'],['c','3']]
[['a','2'],['a','4'],['c','8'],['d','3']
[['b','3'],['c',5'],['c','6'],['d','4']]
값을 세 개의 새 열로 추출하고 싶습니다 x y z
.
이렇게 :
x y z
['a','1'],['b','2'] ['c','3']
['a','2'],['a','4'] ['c','8'] ['d','3']
['b','3'] ['c','5'],['c','6'] ['d','4']
SQL 문으로이 작업을 수행 할 수 있습니까?
미리 감사드립니다
각 행을 분할하려면 재귀 CTE가 필요하고 요구 사항에 따라 값을 수집하려면 GROUP_CONCAT ()가 필요합니다.
WITH cte AS (
SELECT rowid,
SUBSTR(test, 1, INSTR(test || ';', ';') - 1) col,
SUBSTR(test, INSTR(test || ';', ';') + 1) rest
FROM (SELECT rowid, REPLACE(REPLACE(REPLACE(test, '[[', '['), ']]', ']'), '],[', '];[') test FROM tablename)
UNION ALL
SELECT rowid,
SUBSTR(rest, 1, INSTR(rest || ';', ';') - 1),
SUBSTR(rest, INSTR(rest || ';', ';') + 1)
FROM cte
WHERE LENGTH(rest) > 0
)
SELECT GROUP_CONCAT(CASE WHEN col LIKE '[''a'',%' OR col LIKE '[''b'',%' THEN col END) x,
GROUP_CONCAT(CASE WHEN col LIKE '[''c'',%' THEN col END) y,
GROUP_CONCAT(CASE WHEN col LIKE '[''d'',%' THEN col END) z
FROM cte
GROUP BY rowid
데모를 참조하십시오 .
결과 :
엑스 | 와이 | 와 |
---|---|---|
[ 'a', '1'], [ 'b', '2'] | [ 'c', '3'] | 없는 |
[ 'a', '2'], [ 'a', '4'] | [ 'c', '8'] | [ 'd', '3'] |
[ 'b', '3'] | [ 'c', 5 '], ['c ','6 '] | [ 'd', '4'] |
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다