sql-server - 从 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 子句,根据名称返回具体的值。
解决方案
这是一项微不足道的任务。
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 |
+------+------------+
推荐阅读
- logging - 如何在 KDB 中重放多个日志文件
- c# - 发布项目前的提示 - 我如何推送更新?
- javascript - Material UI:TablePagination 中的样式嵌套组件
- php - 如何在 JSON Laravel 中获取子类别和子类别用户类别下的孩子
- javascript - 遇到异步超时错误时如何用玩笑测试快速应用程序?
- android - 使用不可为空的片段管理器
- python-3.x - 查询 mongodb 数据库时出现无效文档错误
- python - 如何通过熊猫删除数字中的点
- angular - 深拷贝还是不深拷贝——为什么ngrx的状态应该是不可变的呢?
- azure - 使用 PowerShell 获取 Azure 自动化帐户连接的服务主体