我有一列,其字符串值为:
[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);
输出
关于sql - 使用 SQL Server 用逗号分割字符串但忽略双引号内的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77600788/