SQL:选择具有XML标记的记录
我想问一下,如何仅从具有XML列的表中选择那些记录,它们的XML中包含特定的标记 表名为:Searchindex 包含XML:Record的列 XML元素: 标签只包含在少数记录中,而不是全部记录中 XML示例结构:SQL:选择具有XML标记的记录,sql,sql-server,xml,Sql,Sql Server,Xml,我想问一下,如何仅从具有XML列的表中选择那些记录,它们的XML中包含特定的标记 表名为:Searchindex 包含XML:Record的列 XML元素: 标签只包含在少数记录中,而不是全部记录中 XML示例结构: <Record> <ppn>asasaa</ppn> <NAM>asdad</NAM> <HasProduct>True</HasProduct> << this
<Record>
<ppn>asasaa</ppn>
<NAM>asdad</NAM>
<HasProduct>True</HasProduct> << this tag is only on certain records
<ART>asdadsa</ART>
<PublicationDate>06/21/1999</PublicationDate>
<PSal>1305</PSal>
<MSal>14</MSal>
<Xpos>False</Xpos>
</Record>
任何例子都很好
非常感谢 以下是示例:
CREATE TABLE T
(
ID int,
X xml
)
INSERT INTO T VALUES
(1, '<Record>
<ppn>asasaa</ppn>
<NAM>asdad</NAM>
<HasProduct>True</HasProduct>
<ART>asdadsa</ART>
<PublicationDate>06/21/1999</PublicationDate>
<PSal>1305</PSal>
<MSal>14</MSal>
<Xpos>False</Xpos>
</Record>'),
(2, '<Record>
<Xpos>False</Xpos>
</Record>')
SELECT *
FROM T
WHERE X.exist('Record/HasProduct')=1
/*Tag with value=True*/
SELECT *
FROM T
WHERE X.exist('Record/HasProduct[text()="True"]')=1
试一试
\w可以更改为您想要的任何搜索值我们是否应该猜测您的xml文档结构?sql server 2012是否可以使用此结构的可能副本?我基于mysql,但此链接可以告诉您有关sql server上的REGEXP的所有信息,我想它是有效的:你好Pawel Dyl我试过你的问题了。表SearchIndex总共包含131307条记录。我知道在131307条记录中,只有几百条是真的。当我像这样运行您的查询时:从SearchIndex WHERE Record.exist'Record/HasJoyTunes'=1中选择*。你知道我遗漏了什么吗?只有HasProduct标签或HasProduct标签的value=True?答案已更新。值为True的HasProduct标记-我认为该值不相关,因为没有值为False的HasProduct标记。要么是标签,要么不是。这一个有效:从SearchIndex中选择*,其中Record.exist'Record/HasProduct[text=True]=1事实证明HasProduct标签中不仅包含True值:
SELECT * FROM table1
WHERE x REGEXP '<HasProduct>\w+</HasProduct>'