首页 > 解决方案 > 从 SQL 中的 XML 字段中选择数据

问题描述

我正在尝试从 MSSQL 服务器数据库中的 XML 字段中提取数据,下面的示例 XML

<Results>
    <Result name="A" ID="1" category="C" resultLevel="">
        <Value>01/01/1900</Value>
    </Result>

理想情况下,选择语句将返回以下内容作为查询结果

姓名 价值
一个 01/01/1900
1910 年 1 月 1 日

然后根据查询结果,添加 where 子句,根据名称返回具体的值。

标签: sql-serverxmltsqlxquery

解决方案


这是一项微不足道的任务。

XQuery.nodes().value()救援方法。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT INTO @tbl (xmldata) VALUES
(N'<Results>
    <Result name="A" ID="1" category="C" resultLevel="">
        <Value>2021-03-10</Value>
    </Result>
    <Result name="B" ID="1" category="C" resultLevel="">
        <Value>2021-03-12</Value>
    </Result>
</Results>');
-- DDL and sample data population, end

SELECT c.value('@name', 'VARCHAR(20)') AS [name]
    , c.value('(Value/text())[1]', 'DATE') AS [value]
FROM @tbl CROSS APPLY xmldata.nodes('/Results/Result') AS t(c)
WHERE c.value('(Value/text())[1]', 'DATE') = '2021-03-10';

输出

+------+------------+
| name |   value    |
+------+------------+
| A    | 2021-03-10 |
+------+------------+

推荐阅读