【问题标题】:SQL: Select records that have XML tagSQL:选择具有 XML 标记的记录
【发布时间】:2016-09-09 18:24:34
【问题描述】:

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

表名是:Searchindex XML 列:记录 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>

任何例子都会很棒。

非常感谢!

【问题讨论】:

标签: sql sql-server xml


【解决方案1】:

示例如下:

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

【讨论】:

  • 您好 Pawel Dyl,我尝试了您的查询。 SearchIndex 表共包含 131307 条记录。我知道在这 131307 条记录中,只有几百条带有标签 True。当我像这样运行您的查询时: SELECT * FROM SearchIndex WHERE Record.exist('Record/HasJoyTunes')=1 - 我得到 47716 条记录,这是很多记录。知道我可能缺少什么吗?
  • 只有 HasProduct 标记或具有 value=True 的 HasProduct 标记?答案已更新。
  • 具有 value=True 的 HasProduct 标签 - 我认为该值无关紧要,因为没有 value=False 的 HasProduct 标签。它要么是那里的标签,要么不是。
  • 这个有效:SELECT * FROM SearchIndex WHERE Record.exist('Record/HasProduct[text()="True"]')=1
  • 原来HasProduct标签里面不仅有True的值:)
【解决方案2】:

试试

SELECT * FROM table1
WHERE x REGEXP '<HasProduct>\w+</HasProduct>'

\w 可以更改为您想要的任何搜索值

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多