从 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 |
+------+------------+
我正在尝试从 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 |
+------+------------+