当前位置: 首页 > news >正文

SQL把字符串按逗号分割成记录

        在 SQL 中,可以通过以下方法将字符串按逗号分割,并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法:


1. 使用 STRING_SPLIT(SQL Server 2016+)

   STRING_SPLIT 是 SQL Server 提供的内置函数,用于将字符串按分隔符拆分。

DECLARE @input_string NVARCHAR(MAX) = 'a,b,c,d,e'; SELECT value AS split_value 
FROM STRING_SPLIT(@input_string, ','); 
  • 结果
    split_value 
    ----------- a b c d e 

2. 使用 unneststring_to_array(PostgreSQL)

        在 PostgreSQL 中,可以通过 string_to_array 将字符串转换为数组,再用 unnest 展开数组为记录。

SELECT unnest(string_to_array('a,b,c,d,e', ',')) AS split_value; 
  • 结果
    split_value 
    ----------- a b c d e 

3. 使用 SPLIT(MySQL 8.0+ 或 MariaDB 10.4+ 的 JSON 功能)

         虽然 MySQL 本身没有直接的字符串分割函数,但可以结合 JSON 功能实现。

方法 1:JSON_TABLE(MySQL 8.0+)
SET @input_string = 'a,b,c,d,e'; 
SELECT split_value 
FROM JSON_TABLE( CONCAT('["', REPLACE(@input_string, ',', '","'), '"]'), '$[*]' COLUMNS (split_value VARCHAR(100) PATH '$') 
) AS jt; 
方法 2:递归 CTE(适用于更低版本 MySQL)
WITH RECURSIVE split_cte AS 
( SELECT SUBSTRING_INDEX('a,b,c,d,e', ',', 1) AS split_value, SUBSTRING_INDEX('a,b,c,d,e', ',', -1) AS remainder, 1 AS idx UNION ALL SELECT SUBSTRING_INDEX(remainder, ',', 1), CASE WHEN remainder = split_value THEN '' ELSE SUBSTRING_INDEX(remainder, ',', -1) END, idx + 1 FROM split_cte WHERE remainder <> split_value 
) SELECT split_value FROM split_cte; 

4. PL/SQL 分割函数(Oracle)

         在 Oracle 中,可以使用带递归的 PL/SQL 函数或 XML 解析来实现字符串分割。

方法:XMLTABLE
SELECT column_value AS split_value 
FROM XMLTABLE('a,b,c,d,e' RETURNING CONTENT BY ',' ); 

5. 程序语言辅助(Python、Java 等)

         如果数据库不提供内置函数,可以在应用程序中处理。例如,Python:

input_string = 'a,b,c,d,e' 
records = input_string.split(',') 
print(records) 

总结

  • SQL Server: STRING_SPLIT
  • PostgreSQL: string_to_array + unnest
  • MySQL 8.0+: JSON_TABLE
  • Oracle: XMLTABLE
  • 旧版数据库: 使用递归 CTE 或程序端辅助。
http://www.lryc.cn/news/515489.html

相关文章:

  • C#设计模式(行为型模式):观察者模式
  • pytorch镜像源
  • Verilog语法之常用行为级语法
  • PADS Logic原理图中有很多页原理图,如何(怎样)删除其中一页或者多页
  • 蓝色简洁引导页网站源码
  • Apache PDFBox添加maven依赖,pdf转成图片
  • mybatis 和 mybatisPlus 兼容性问题
  • Mono里运行C#脚本23—mono_jit_exec
  • 第十一章 图论
  • 纯前端实现将pdf转为图片(插件pdfjs)
  • 【IT人物系列】之MySQL创始人
  • 在Typora中实现自动编号
  • Single Shot MultiBox Detector(SSD)
  • kafka生产者专题(原理+拦截器+序列化+分区+数据可靠+数据去重+事务)
  • 【React+TypeScript+DeepSeek】穿越时空对话机
  • 公共数据授权运营系统建设手册(附下载)
  • 基于HTML和CSS的旅游小程序
  • maven之插件调试
  • SQL Sever 数据库损坏,只有.mdf文件,如何恢复?
  • 【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理
  • primevue的<Menu>组件
  • 利用Deeplearning4j进行 图像识别
  • 练习题:37
  • Unity热更文件比较工具类
  • 【hustoj注意事项】函数返回值问题
  • 实现一个通用的树形结构构建工具
  • 数势科技:解锁数据分析 Agent 的智能密码(14/30)
  • 机器学习之过采样和下采样调整不均衡样本的逻辑回归模型
  • 解决 ssh connect to host github.com port 22 Connection timed out
  • mybatis/mybatis-plus中mysql报错