首页 > 数据库 > 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板