首页 > 数据库 >SQL把字符串按逗号分割成记录

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

时间:2025-01-04 14:02:53浏览次数:3  
标签:string value 逗号 split SQL 字符串 input SELECT

        在 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 或程序端辅助。

标签:string,value,逗号,split,SQL,字符串,input,SELECT
From: https://blog.csdn.net/qq_38531502/article/details/144921777

相关文章

  • mysql 使用时需要注意的
    查询常用的查询字段,记得加索引加索引能够提高查询速度。join不要超过两张表join越多,查询越慢。最好用简单的查询语句。分页查询一定要记得加orderbyMYSQL分页查询时没有用ORDERBY,数据量大的时候,有可能会出现数据重复。详情见:https://cloud.tencent.com/develo......
  • leetCode43.字符串相乘
    题目:给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。示例1:输入:num1="2",num2="3"输出:"6"示例2:输入:num1="123",num2="456"输出:"56088"思路通过倒序,从个......
  • Gin+GORM+Zap+PostgreSQL的Web后端-Gin进阶
    上一篇文章介绍了Gin和Gin的简单使用,本次介绍Gin进阶使用,并和一些常用的库组合使用,最后测试运行并写入数据到PostgreSQL数据库。可配置在configs目录下,新增了config.yml作为配置文件,使用viper库读取配置文件参数,来设置Gin框架和一些其他参数。funcInitConfig(){ viper.AddCo......
  • linux命令行连接Postgresql常用命令
    1.linux系统命令行连接数据库命令psql-hhostname-pport-Uusername-ddatabasename-h 主机名或IP地址  -p 端口  -U 用户名  -d 连接的数据库2.查询数据库表命令selectversion()  #查看版本号\dg     #查看用户\l       #查......
  • 使用js写一个方法计算字符串的长度,英文算半个
    在前端开发中,如果你想要计算字符串的长度,并且希望英文字符算作半个长度,你可以使用JavaScript编写一个函数来实现这个功能。下面是一个示例函数,它遍历字符串中的每个字符,检查字符是否为英文字符(这里假设英文字符是指ASCII码在32到126之间的字符,包括空格),并据此计算长度:functioncal......
  • Java项目:师生健康信息管理系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)
     源码获取:俺的博客首页"资源"里下载!项目介绍springboot师生健康信息管理系统环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.硬件环境:windows7/8/101G内存以上;或者MacO......
  • Java项目:师生健康信息管理系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)
     源码获取:俺的博客首页"资源"里下载!项目介绍springboot师生健康信息管理系统环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.硬件环境:windows7/8/101G内存以上;或者MacO......
  • C++中的字符( char )、字符数组( char[] )、字符串( std::string )
    字符(char)定义:char是C++中的基本数据类型,用于表示单个字符。char在内存中通常占用一个字节(8位)。在ASCII编码系统中,每个字符都对应一个唯一的整数值,char类型可以存储这些值来表示相应的字符。charch='A';//存储字符'A'与其他类型的联系:字符本质上是一个小整数类......
  • MySQL锁的概念
    锁的基本概念锁在MySQL中是一种并发控制机制,它确保在多用户或多事务环境下数据的完整性和一致性。当多个事务同时访问和操作数据库中的数据时,为了防止数据出现不一致、丢失更新、脏读、不可重复读和幻读等问题,就需要使用锁来协调这些事务的访问顺序。例如,在一个银行转账系......
  • MySQL 的内部临时表
    在有些情况下,MySQLServer会在处理语句时创建内部临时表。用户无法直接控制这种情况何时发生。 通常情况下,内部临时表首先保留在内存中,以获得最佳查询性能。为避免内存分配过多,MySQL提供了参数,可用于设置内存限制。当达到该限制时,内部临时表就会溢出到磁盘存储。MySQL可能会......