在SQLite 中分割逗號分隔值:通用表格運算式(CTE) 方法
在資料管理領域,需要分隔符號分隔值(CSV) 經常出現。對於流行的輕量級資料庫系統 SQLite 來說,由於缺乏專用的 substring() 函數,此任務可能不像其他 SQL 環境那麼簡單。但是,還有一個利用通用表表達式 (CTE) 的替代解決方案。
讓我們考慮以下場景:我們有一個表,其中包含包含逗號分隔字串的「類別」列,並且我們想要提取每個字串中的各個值放入單獨的行中。
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中文網其他相關文章!