我在数据库字段中有这样的字符串:
"Anz Längsteiler":0;"Anz Querteiler":0;"BoxTyp":"M";"Führungslänge":500;"Gewicht":40;
在PowerShell中,我可以这样做:
$Hash = @{}
($BoxDS -replace '"','') -split ';' | foreach {
$Val = $_ -split ":" ; $Hash[$Val[0]] = $Val[1]
}
得到这样的输出以供进一步使用:
PS C:\Windows\System32\WindowsPowerShell\v1.0> $hash
Name Value
---- -----
BoxTyp M
Anz Längsteiler 0
Anz Querteiler 0
Führungslänge 500
Gewicht 40
现在我想摆脱我的PowerShell脚本并创建一个SQL函数。
有没有什么办法可以用Name创建一个变量(正如你在PowerShell输出名称列中看到的那样)和保存在那里的值?
我是SQL的新手,我读到了关于REPLACE()
和SPLIT()
的内容,但是我无法理解它。特别是在动态创建变量时。
我在MS SQL Server 2016上
如果你的sql-server版本是2016,你可以尝试使用STRING_SPLITE函数和CROSS APPLY
。
我会用STRING_SPLIT
写一个子查询来将;
拆分为结果集。
使用指定的分隔符拆分字符表达式。
然后编写另一个子查询查询,通过:
基于上部结果集拆分CROSS APPLY
。
查询1:
SELECT MAX(CASE WHEN t2.rn = 1 THEN t2.value end) Name,
MAX(CASE WHEN t2.rn = 2 THEN t2.value end) Value
FROM (
SELECT value as val
FROM STRING_SPLIT(Replace('"Anz Längsteiler":0;"Anz Querteiler":0;"BoxTyp":"M";"Führungslänge":500;"Gewicht":40;','"',''),';')
) t1 CROSS APPLY (
SELECT *,ROW_NUMBER() OVER(PARTITION BY t1.val order by t1.val) rn
FROM STRING_SPLIT(t1.val,':')
) t2
where t1.val<>''
GROUP BY t1.val
| Name | Value |
|-----------------|-------|
| Anz Längsteiler | 0 |
| Anz Querteiler | 0 |
| BoxTyp | M |
| Führungslänge | 500 |
| Gewicht | 40 |