sql - 使用 SQL Server 用逗号分割字符串但忽略双引号内的逗号

标签 sql sql-server

我有一列,其字符串值为:

[04/11/2023,"New addition","","new additional of fund","This, Adam, Kyle","5.00","11147474"]

这个值中有7个逗号,相当于需要提取7列。有些值可以在实际值中包含逗号,但这些值用双引号引起来。

如何将这些值提取到单独的列中?

[04/11/2023], [New addition], [NULL], [new additional of fund], [This, Adam, Kyle], [5.00],[11147474]

这看起来很简单,但不知道如何在 sql 中执行。

最佳答案

您的数据样本类似于 JSON。

这就是为什么我们可以将其转换为合法的 JSON,然后轻松地将其标记为单独的列。

它将从 SQL Server 2016 开始运行。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens NVARCHAR(MAX));
INSERT @tbl (tokens) VALUES
('[04/11/2023,"New addition","","new additional of fund","This, Adam, Kyle","5.00","11147474"]');
-- DDL and sample data population, end

SELECT ID --, j
    , JSON_VALUE(j, '$[0]') AS col0
    , JSON_VALUE(j, '$[1]') AS col1
    , JSON_VALUE(j, '$[2]') AS col2
    , JSON_VALUE(j, '$[3]') AS col3
    , JSON_VALUE(j, '$[4]') AS col4
    , JSON_VALUE(j, '$[5]') AS col5
    , JSON_VALUE(j, '$[6]') AS col6
FROM @tbl AS t
CROSS APPLY (SELECT STUFF(STUFF(tokens,12,0, '"'),2,0,'"')) AS t1(j);

输出

<表类=“s-表”> <标题> ID col0 col1 col2 col3 col4 第 5 列 第 6 列 <正文> 1 2023年4月11日 新增内容 新增资金 这个,亚当,凯尔 5.00 11147474

关于sql - 使用 SQL Server 用逗号分割字符串但忽略双引号内的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77600788/

相关文章:

php - INNER JOIN + SELECT 特定列

sql - 返回具有 3 个或更多遵循模式的连续值的行

sql-server - 在 SQL Server 中应该选择 MONEY 还是 DECIMAL(x,y) 数据类型?

SQL Server ISNULL/Coalesce 仍然返回空列表

sql-server - 围绕多个插入或更新使用事务的正确方法

java - 有没有办法将本地数据库添加到 netbeans java 项目包中?

php - 如何将通过 HTTP Post 接收到的图像保存到 mySQL 中

sql - 为什么SA账号不能再访问master数据库了?

sql-server - 必须声明表变量 "@table"吗?

mysql - 主键和外键相同 MySQL 显示异常