在我们的数据库表中,列存储为xml字符串,如下所示。
<DocumentElement>
<PartInfo>
<ID>0</ID>
<PartNo>0</PartNo>
<SerialNo>1</SerialNo>
<Parameter>0</Parameter>
<InstalledDate>2013-01-15T00:00:00+05:30</InstalledDate>
<InstalledTill>2013-01-25T00:00:00+05:30</InstalledTill>
</PartInfo>
</DocumentElement>
我想获取此字符串的列值。例如,我必须获得2013-01-15T00:00:00+05
列的值Installed Date
。如何使用forxml子句获取此内容?
答案 0 :(得分:0)
假设SQL-Server可以使用以下内容:
DECLARE @T TABLE (X XML);
INSERT @T VALUES ('<DocumentElement>
<PartInfo>
<ID>0</ID>
<PartNo>0</PartNo>
<SerialNo>1</SerialNo>
<Parameter>0</Parameter>
<InstalledDate>2013-01-15T00:00:00+05:30</InstalledDate>
<InstalledTill>2013-01-25T00:00:00+05:30</InstalledTill>
</PartInfo>
</DocumentElement>');
SELECT InstalledDate = X.value('/DocumentElement[1]/PartInfo[1]/InstalledDate[1]', 'DATETIME')
FROM @T;
如果PartInfo
中有多个DocumentElement
个节点,那么您需要使用CROSS APPLY .. nodes
来获取所有InstalledDate
个
SELECT InstalledDate = PartInfo.value('InstalledDate[1]', 'DATETIME')
FROM @T
CROSS APPLY X.nodes('/DocumentElement/PartInfo') p (PartInfo);