簡介
從逗號分隔中擷取單一值字串是資料分析中的常見需求。在 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 的遞迴部分建立一個起點。我們為「word」指定一個空字串,並附加一個逗號分隔的字串和一個額外的逗號來指示 CSV 的結尾。
「遞迴查詢」就是神奇發生的地方。它使用 instr() 函數來尋找「csv」欄位中第一個逗號的位置。然後,它使用 substr() 將 'csv' 欄位拆分為 'word' 和剩餘的 'csv' 部分。
遞歸用於繼續分割剩餘的 'csv' 部分,直到不再有逗號為止,有效提取所有逗號分隔值。
檢索拆分值
一旦CTE 定義了分割值,我們就可以使用簡單的查詢來檢索它們:
SELECT word FROM split WHERE word!='';
WHERE子句過濾掉表示初始值和終端值。
產出與效益
查詢的輸出如下:
Auto A 1234444
這個方法有幾個好處:
以上是如何使用公用表表達式輕鬆拆分 SQLite 中的逗號分隔值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!