SQL Server:请求在每次出现相同子字符串后提取字符串

问题描述

我有一个这种格式的字符串

"AB=10,AC=11,AC=12,AC=13,AD=14,AD=15,AD=16"

并且我想将数字放在不同的列中,为每列提供您可以在与此数字关联的 = 之前的字符串中找到的名称

所以在这里,我想有 7 个这样的列

AB AC1 AC2 AC3 AD1 AD2 AD3
10 11 12 13 14 15 16

编辑:这个结构是固定的,我们总是有一个 AB、三个 AC 和三个 AD。

我的问题是我们有 3 次出现 AC 和 3 次出现 AD,我无法访问包含在 AC 和 {{ 2nd 和 3rd 中的数据1}}。我尝试了 ADPATINDEX 并且总是只到达第一次出现。

是否可以在单个 CHARINDEX 查询中完成?

解决方法

您可以尝试基于 JSON 的方法。您需要将输入转换为具有适当结构的有效 JSON(npm cache clean --force'AB=10,AC=11,AC=12,AC=13,AD=14,AD=15,AD=16)并使用 [{"AB":10},{"AC":11},{"AC":12},{"AC":13},{"AD":14},{"AD":15},{"AD":16} 解析它:

JSON_VALUE()

结果:

DECLARE @input nvarchar(max) = N'AB=10,AD=16'
SET @input = CONCAT('[{"',REPLACE(REPLACE(@input,','"},{"'),'=','":"'),'"}]')

SELECT 
   JSON_VALUE(@input,'$[0].AB') AS AB,JSON_VALUE(@input,'$[1].AC') AS AC1,'$[2].AC') AS AC2,'$[3].AC') AS AC3,'$[4].AD') AS AD1,'$[5].AD') AS AD2,'$[6].AD') AS AD3

如果数据存储在表中:

AB  AC1 AC2 AC3 AD1 AD2 AD3
10  11  12  13  14  15  16

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...