T-SQL 字符索引 patindex

问题描述

有没有人有脚本可以提取列中保存的数据以将服务器名称拆分为他们自己的列?

| ID|  Servers
|:-:|---------------------------------------------------------------------------------
| 1 |   {"Name":"sql-Vlfflk43E"}
| 2 |   {"Name":"sql-VgflkglkdA"},{"Name":"sql-VCkfkjgitrE"},{"Name":"sql-;bv;b;b"},{"Name":"sql-kkkbdddb"}
| 3 |  {"Name":"sql-VgkgkgA"},{"Name":"sql-VfkgkjygtbB"},{"Name":"sql-lglg"}
| 4 |   {"Name":"sql-VotoevB"},{"Name":"sql-VCfkjfkjrtrE"},{"Name":"sql-lglkgl"}
| 5 |   {"Name":"sql-VblgltotA"},{"Name":"sql-VCfkfkgE"},{"Name":"sql-lkgkjgkg"}
| 6 |   {"Name":"sql-VCggkgkg"}

那么 ID 1 & 2 会变成下面这样吗?我知道 charpatindex 可以帮助我努力理解它。

| ID| Text                                                                                               | Server1       | Server2       | Server3   | Server4 
| 1 | {"Name":"sql-Vlfflk43E"}                                                                           |sql-Vlfflk43E  |null           |null       | null
| 2 | {"Name":"sql-VgflkglkdA"},{"Name":"sql-kkkbvb;b"},{"Name":"sql-kkkbdddb"}|sql-VgflkglkdA|sql-VCkfkjgitrE|sql-kkkbvb | sql-kkkbdddb   

解决方法

您可以将存储的数据转换为有效的 JSON 数组并使用 JSON_VALUE() 进行解析:

SELECT 
   ID,Server1 = JSON_VALUE(CONCAT('[',Servers,']'),'$[0].Name'),Server2 = JSON_VALUE(CONCAT('[','$[1].Name'),Server3 = JSON_VALUE(CONCAT('[','$[2].Name'),Server4 = JSON_VALUE(CONCAT('[','$[3].Name')
FROM (VALUES
   (1,'{"Name":"SQL-Vlfflk43E"}'),(2,'{"Name":"SQL-VgflkglkdA"},{"Name":"SQL-VCkfkjgitrE"},{"Name":"SQL-;bv;b;b"},{"Name":"SQL-kkkbdddb"}'),(3,'{"Name":"SQL-VgkgkgA"},{"Name":"SQL-VfkgkjygtbB"},{"Name":"SQL-lglg"}'),(4,'{"Name":"SQL-VotoevB"},{"Name":"SQL-VCfkjfkjrtrE"},{"Name":"SQL-lglkgl"}'),(5,'{"Name":"SQL-VblgltotA"},{"Name":"SQL-VCfkfkgE"},{"Name":"SQL-lkgkjgkg"}'),(6,'{"Name":"SQL-VCggkgkg"}')
) v (ID,Servers)

结果:

ID  Server1        Server2          Server3     Server4
-------------------------------------------------------------
1   SQL-Vlfflk43E           
2   SQL-VgflkglkdA SQL-VCkfkjgitrE  SQL-;bv;b;b SQL-kkkbdddb
3   SQL-VgkgkgA    SQL-VfkgkjygtbB  SQL-lglg    
4   SQL-VotoevB    SQL-VCfkjfkjrtrE SQL-lglkgl  
5   SQL-VblgltotA  SQL-VCfkfkgE     SQL-lkgkjgkg    
6   SQL-VCggkgkg            

相关问答

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