【发布时间】:2019-01-28 15:02:10
【问题描述】:
我通过以下代码创建了一个 SQL 表,其中包含我需要能够提取的信息的列 UserDefinedXML。
SELECT A.ExternalID, A.UserDefinedXML, A.ServiceSiteUid, A.LastModifiedDate, A.PersonUid,
B.FirstName, B.LastName, B.PersonUid,
C.Name
FROM Patient A
INNER JOIN Person B ON B.PersonUid = A.PersonUid
INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
WHERE A.UserDefinedXML IS NOT NULL
ORDER By LastModifiedDate
我一直在通过 R 中的许多 gsub 提取它,但这是低效的,而且不是最好的方法,我敢肯定。 XML格式如下
<data>
<LOA>
<NotMedNecessaryInsCompany ControlType="PrmTextBox" Value="" Label="" />
<DicontinuedDate ControlType="FindDateBox" Value="" Label="" Display="false" />
<ReceivedDate ControlType="FindDateBox" Value="" Label="" Display="false" />
<SentDate ControlType="FindDateBox" Value="" Label="" Display="false" />
<ReasonDiscontinued ControlType="PrmTextBox" Value="" Label="" />
<NoOONBenefitsInsCompany ControlType="PrmTextBox" Value="" Label="" />
<InsuranceStatus ControlType="PrmGroupBox" Label="" Value="" />
<OtherReasonDenied ControlType="PrmTextBox" Value="" Label="" />
<FacilityRefused ControlType="PrmCheckBox" Value="false" Label="Facility Refused" />
<ReasonDenied ControlType="PrmCheckBox" Value="false" Label="Other" />
</LOA>
<Forms>
<POReceivedDate ControlType="FindDateBox" Value="" Label="" Display="false" />
<InformedConsentReceivedDate ControlType="FindDateBox" Value="" Label="" Display="false" />
<AuthorizationToTreatReceivedDate ControlType="FindDateBox" Value="" Label="" Display="false" />
</Forms>
<Skin_Sheet>
<SkinSheet ControlType="PrmGroupBox" Label="No" Checked="PrmRadioButton1" Value="" />
</Skin_Sheet>
</data>
目前,我只对SkinSheet 标题下的最后几行中选择“是”还是“否”感兴趣。最终,我需要能够访问此字符串中的所有字段。不幸的是,我对 SQL 非常缺乏经验,并且在工作中被投入其中,所以我正在努力学习。
【问题讨论】:
-
你看过 XQUERY 吗? xml Data Type Methods
-
在不同的注释Bad habits to kick : using table aliases like (a, b, c) or (t1, t2, t3)。使用像
A、B、C这样的别名只会让事情变得更加困难,尤其是当您以不同的顺序在不同的查询中引用相同的对象时。您很可能会遇到每个对象都有不同别名的查询,但在您打开的这些 3/4 查询中引用了相同的 3/4 对象。让事情变得非常混乱,不仅仅是你,还有其他必须阅读你的 SQL 的人。
标签: sql sql-server xml tsql