首頁 > 資料庫 > mysql教程 > 如何使用公用表表達式輕鬆拆分 SQLite 中的逗號分隔值?

如何使用公用表表達式輕鬆拆分 SQLite 中的逗號分隔值?

DDD
發布: 2025-01-03 00:11:42
原創
594 人瀏覽過

How Can I Easily Split Comma-Separated Values in SQLite Using Common Table Expressions?

建立在SQLite 中分割逗號分隔值的簡單方法

簡介

從逗號分隔中擷取單一值字串是資料分析中的常見需求。在 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
登入後複製

這個方法有幾個好處:

  • 它使用遞歸CTE,這是一種處理迭代性質的優雅而有效的方法
  • 輸出很容易理解和使用。
  • 它不需要使用Replace() 和 Trim() 函數可能更複雜且容易出錯。

以上是如何使用公用表表達式輕鬆拆分 SQLite 中的逗號分隔值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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