Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:选择具有XML标记的记录_Sql_Sql Server_Xml - Fatal编程技术网

SQL:选择具有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

我想问一下,如何仅从具有XML列的表中选择那些记录,它们的XML中包含特定的标记

表名为:Searchindex 包含XML:Record的列 XML元素:

标签只包含在少数记录中,而不是全部记录中

XML示例结构:

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