从 SQL 中的 XML 字段中选择数据

Selecting data from XML field in SQL

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

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

理想情况下 select 语句将 return 以下内容作为查询结果

Name Value
A 01/01/1900
B 01/01/1910

然后根据查询结果,根据名字return具体值添加where子句

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

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 |
+------+------------+