简介
从逗号分隔中提取单个值字符串是数据分析中的常见需求。在 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中文网其他相关文章!