【问题标题】:T-SQL Char index patindexT-SQL 字符索引 patindex
【发布时间】:2021-08-08 12:49:03
【问题描述】:

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

| 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-VCkfkjgitrE"},{"Name":"SQL-kkkbvb;b"},{"Name":"SQL-kkkbdddb"}|SQL-VgflkglkdA|SQL-VCkfkjgitrE|SQL-kkkbvb | SQL-kkkbdddb   

【问题讨论】:

  • 您的 SQL Server 版本是多少? Servers 列是 JSON,所以你可以尝试解析它。

标签: sql sql-server charindex patindex


【解决方案1】:

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

SELECT 
   ID, 
   Server1 = JSON_VALUE(CONCAT('[', Servers, ']'), '$[0].Name'),
   Server2 = JSON_VALUE(CONCAT('[', Servers, ']'), '$[1].Name'),
   Server3 = JSON_VALUE(CONCAT('[', Servers, ']'), '$[2].Name'),
   Server4 = JSON_VALUE(CONCAT('[', Servers, ']'), '$[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            

【讨论】:

  • 太棒了!这对我有用!谢谢一百万。,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2017-05-20
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 2022-08-03
  • 2011-12-24
相关资源
最近更新 更多