首頁 > 資料庫 > mysql教程 > 如何使用公共表表達式 (CTE) 在 SQLite 中拆分逗號分隔值?

如何使用公共表表達式 (CTE) 在 SQLite 中拆分逗號分隔值?

Barbara Streisand
發布: 2024-12-31 22:01:17
原創
729 人瀏覽過

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

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板