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

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.kler.cn/a/467453.html

相关文章:

  • 跨站脚本攻击(XSS)详解
  • 实现AVL树
  • 计算机网络——数据链路层-流量控制和可靠传输
  • HTML5 文件上传(File Upload)详解
  • Spring boot接入xxl-job
  • 解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
  • 19.2、windows安全分析与防护
  • CSP初赛知识学习计划(第一天)
  • Linux相关开发工具
  • wordpress主题开发之function.php的10大作用
  • Spring Boot中的 6 种API请求参数读取方式
  • 如何解析和处理电商平台的按图搜索商品API返回值?
  • Seata 使用教程:全面解锁分布式事务管理
  • 32单片机从入门到精通之开发环境——集成开发环境(IDE)(五)
  • 源码理解 UE4中的 FCookStatsManager::FAutoRegisterCallback RegisterCookStats
  • MySQL数据结构选择
  • 13-Gin 中使用 GORM 操作 mysql 数据库 --[Gin 框架入门精讲与实战案例]
  • 软件测试面试题(一)
  • AI来帮忙:蛋白纯化不用慌
  • 网关的主要作用
  • 跨链多链与非托管交易结合:ANEX协议为区块链资产去中心化管理提供创新解决方案
  • C++ 中 Unicode 字符串的宽度
  • React知识盲点——组件通信、性能优化、高级功能详解(大纲)
  • LE Audio 初探
  • 语义搜索的交互范式
  • SpringBoot整合springmvc、扩展springmvc