sql - 在 SQL 中替换和拆分字符串并从值创建变量
问题描述
我在数据库字段中有一个这样的字符串:
"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 函数。
有什么方法可以创建一个带有名称的变量(如您在 PowerShell 输出名称列中所见)和保存在那里的值?
我对 SQL 很陌生,我阅读过REPLACE()
但SPLIT()
无法真正理解它。特别是在动态创建变量时。
我在 MS SQL Server 2016 上
解决方案
如果您的 sql-server 版本是 2016,您可以尝试将STRING_SPLITE函数与CROSS APPLY
.
我会编写一个子查询STRING_SPLIT
来拆分;
结果集。
使用指定的分隔符拆分字符表达式。
然后编写另一个子查询查询以根据上层结果集拆分:
by 。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 |
推荐阅读
- apache-storm - Stormcrawler 可以为每个拓扑设置不同的状态索引吗?
- java - 如何将读取对象添加到 ArrayList 并打印出用户请求的信息
- xpath - 如何告诉模板匹配不在作为跨度一部分的特定文本上运行?
- python - 如何使用 Beautifulsoup 基于嵌套标签对文本进行切片和重组?
- reactjs - 使用 React 将项目添加到 div
- git - GitHub API - 获取团队中所有 repos 的分支
- java - 制作一种使用星形创建具有正方形 X 的图像的方法
- java - 如果只在 header 中发送路径变量和键值对来触发业务逻辑,使用哪种 REST 方法?
- node.js - 在本地提供 create-react-app 构建以测试 PWA 功能时,如何代理 API 调用?
- reactjs - 如何使用compose导出为索引中的默认值?