sql - SQL 从一组值中选择
问题描述
我有一个字段,其中包含用 ~ 分隔的连续值组。
57|0|0|2|||~56|0|0|2|||~55|0|0|2|||~54|0|0|3|4|5|~53|0|0|4|||~52|0|0|4|||~51|0|0|2|||~
每个组都以一个 ID 开头,例如 54 个后面的 5 个值,用 | 分隔。例如|0|0|3|4|5| 并以〜结尾。如果我有一个 id 例如 ID=54 我想选择 3,我如何从最后选择第三个值;
任何帮助都感激不尽。
解决方案
您可以使用 Shuumi 中的函数将字符串拆分为行,并使用其他问题的代码将单独的行拆分为列。然后你在表中有数据,你可以做正常的选择:
;WITH Split_Names (ElementID,Element, xmlname)
AS
(
SELECT ElementID,
Element,
CONVERT(XML,'<Names><name>'
+ REPLACE(Element,'|', '</name><name>') + '</name></Names>') AS xmlname
FROM [dbo].[func_Split] ('57|0|0|2|||~56|0|0|2|||~55|0|0|2|||~54|0|0|3|4|5|~53|0|0|4|||~52|0|0|4|||~51|0|0|2|||~','~')
)
SELECT Element,
xmlname.value('/Names[1]/name[1]','varchar(100)') AS ID,
xmlname.value('/Names[1]/name[2]','varchar(100)') AS Element1,
xmlname.value('/Names[1]/name[3]','varchar(100)') AS Element2,
xmlname.value('/Names[1]/name[4]','varchar(100)') AS Element3,
xmlname.value('/Names[1]/name[5]','varchar(100)') AS Element4,
xmlname.value('/Names[1]/name[6]','varchar(100)') AS Element5
INTO #tmp
FROM Split_Names
SELECT Element3 FROM #tmp WHERE ID = 54
推荐阅读
- birt - BIRT 报告 - 需要在每一行中重复一些列
- r - 制定正确的 API 调用以在 R 中检索 WITS 数据
- google-compute-engine - 查找给定机器类型、区域和承诺类型的 GCE 实例的定价信息
- android - Android 10 - 定位屏幕键盘
- java - 如何使用java获取android中的CPU温度?
- objective-c - 为什么 NSNumber(s) 的 NSArray 无法解码?
- python - 分解列表中的字典键
- reactjs - ReactJS,useLayoutEffect 与文档,空值
- r - 提取具有高相关性的变量对
- go - Golang Bazel 为空 coverage_report.dat