sql-server - 如何使用通配符根据 XML 列的内容进行选择
问题描述
我尝试从依赖于 XML 列内容的表中检索所有行。加上内容对应于模式的事实。
我的桌子的布局可能看起来像这样:
|Id |Name|Designation|XML |
| 1 |Abc |Ghi |...|
| 2 |Def |Jkl |...|
假设 XML 列的内容可能是这样的:
<Root>
<Node1>
<SubNode1 />
<SubNode2 />
</Node1>
<Node2>
<SubNode3 property="Something">
...
</SubNode3>
<SubNode3 property="Reference.Object(abcdef12345 (1)).Value">
...
</SubNode3>
<SubNode3 property="SomethingElse">
...
</SubNode3>
</Node2>
</Root>
现在,前面的 XML 是 XML 列的内容,但我们要查找的属性可能在第一个或第三个 SubNode3 中。目标是获取包含节点/Root/Node2/SubNode3/@property 的所有行,其中包含“Reference.Object(ab* (1))。但 () 之间的数字可能是另一个。这里是 1,但它可以是另一个数字。我写 * 表示文本可以是其他任何内容,但以“ab”开头。
我尝试过的(除其他外......)是这样的:
WITH XMLNAMESPACES(DEFAULT 'http://schemas.mycompany.com/validation.xsd')
SELECT *
from [MySchema].[MyTable]
where XML.exist('/Root/Node2/SubNode3/@property[contains(.,"Reference.Object") and contains(.,("(1)"))]') = 1;
但这里的问题是,我不知道怎么说在 (1) 中,1 可能是另一个数字,并且属性属性中第一个括号之间的字符串以“ab”开头,并且可以包含任何内容。
我也尝试使用 xquery.value 来使用 LIKE 语法,但问题是(也许我错过了一些东西)值使用特定节点,我的意思是索引到 [1],所以它在第一个 SubNode3 上搜索而不是其他。
解决方案
推荐阅读
- sql - 无键查询 JSONB
- python - 在 conda 环境中启动 jupyter 的错误消息
- machine-learning - 神经网络中的测试数据准确度高,但在尝试识别图像时输出不佳
- database - 按错误访问查询组(语言从英语更改为未知字符)
- debian - Debian PHP 7.4 - 包 php-memcached 依赖于 php7.3 (debian 10)
- java - Android复选框检查null以避免应用程序崩溃
- css - 为什么 p:first-child 伪类不适用于 p 元素的第一个孩子
- azure-logic-apps - 逻辑应用程序 - 不同的 JSON 模式在后续操作中提供不同的可能性
- python - Logistic Regression CV 多个评分指标
- python - OpenCV 车辆检测