我的表中有一个字段,其中包含不同类型的数据,这些数据可以转换为不同的列或行。
| 自由文本字段|类型ID|
| - ------|- ------|
| {访视信息} [〈访视日期〉2022年1月1日〈/访视日期〉〈访视类型〉临床〈/访视类型〉] {/访视信息} {费用} [30.91 15.00] {/费用} 1个15.00 ]{/Costs} | 1 |
| [2022 - 03 - 04 I10] {/索引事件} 第二章I10 ]{/Index Events} | 2 |
| {访视信息} [〈访视日期〉2022年10月12日〈/访视日期〉〈访视类型〉行政〈/访视类型〉] {/访视信息} {费用} [25.00] {/费用} 1个]{/Costs} | 1 |
我们的想法是将数据包含在{Category}中,然后将与相关的数据包含在中。我需要编写一个查询,返回如下结果集中的数据: and then the data related to the . I need to write a query that returns the data like in the following result set:
| 类型ID|类别|亚类|结果|
| - ------|- ------|- ------|- ------|
| 1个|访视信息|访视日期|2022年1月1日|
| 1个|访视信息|访视类型|临床|
| 1个|费用|实验室|三十点九一分|
| 1个|费用|遭遇|十五点整|
| 第二章|索引事件|日期|2022年3月4日|
| 第二章|索引事件|诊断|I10|
| 1个|访视信息|访视日期|二〇二二年十月十二日|
| 1个|访视信息|访视类型|行政|
| 1个|费用|咨询|二十五点整|
如果能在使用哪些函数方面为我指出正确的方向,我将不胜感激。
我正在SQL Server 2016上使用SSMS
如果有人想知道,我最终将"{"和"}"值分别替换为"〈"和"〉",并删除了"["和"]"值。
之后,我将字段转换为XML,并使用XML节点解析字段,如下所示:
SELECT
TypeID,
UniqueID,
[Free Text Field],
tbl.col.value('local-name(..)','VARCHAR(MAX)') AS Name,
tbl.col.value('local-name(.)','VARCHAR(MAX)') AS Name,
tbl.col.value('.[1]','VARCHAR(MAX)') AS Value
FROM [My Table] a
CROSS APPLY [My Table].[Free Text Field].nodes('/*/*') AS tbl(col)
2条答案
按热度按时间72qzrwbm1#
如果您的数据看起来像这样,那么它就是有效的XML,并且很容易用XML解析器进行解析
| 自由文本字段|类型ID|
| - ------|- ------|
|
<Visit Info><Visit Date>2022-01-01</Visit Date><Visit Type>Clinical</Visit Type></Visit Info><Costs><Laboratory>30.91</Laboratory><Encounter>15.00</Encounter></Costs>
|1个||
<Index Events><Date>2022-03-04</Date><Diagnosis>I10</Diagnosis></Index Events>
|第二章||
<Visit Info><Visit Date>2022-10-12</Visit Date><Visit Type>Administrative</Visit Type></Visit Info><Costs><Consultation>25.00</Consultation></Costs>
|1个|kh212irz2#
你可以用substring做很多事情,比如:
其他类别和子类别可以用同样的方式完成
此操作的输出:
| 类型标识符|范畴|子范畴|价值|
| - ------|- ------|- ------|- ------|
| 1个|费用|实验室|三十点九一分|
| 1个|访视信息|访视日期|2022年1月1日|
| 1个|访视信息|访视日期|二〇二二年十月十二日|
参见:DBFIDDLE