2016-09-09 4 views
1

XMLで特定のタグを含む列を持つテーブルからこれらのレコードのみを選択する方法を質問したいと思います。SQL:XMLタグを持つレコードを選択する

表名は次のとおりです。XMLとにSearchIndex コラム:レコード 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> 

どれ例は素晴らしいことです。

ありがとうございます!ここで

+0

は、我々はあなたのXML文書構造を推測するべき好みの検索値に変更することができますか? – Igor

+0

[xpathを使用してXMLに要素が存在するかどうかを確認する方法](http://stackoverflow.com/questions/5689966/how-to-check-if-an-element-exists-in-the- xml-using-xpath) – Igor

答えて

2

は一例です。

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 
+0

こんにちはPawel Dyl、私はあなたの質問を試みました。 SearchIndexテーブルには、合計131307個のレコードが含まれています。私はそれらの131307レコードのうち、ほんの数百がタグ Trueを持っていることを知っています。私はあなたのクエリをこのように実行します:SELECT * FROM SearchIndex WHERE Record.exist( 'Record/HasJoyTunes')= 1 - 47716レコードを取得します。私は何が欠けているかもしれませんか? –

+0

値がTrueのHasProductタグまたはHasProductタグだけを指定しますか?回答が更新されました。 –

+0

値がTrueのHasProductタグ - 値がFalseのHasProductタグがないため、私が考えた値は無関係でした。そこにタグがあるかどうか。 –

0

ワット\

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

を試してみてくださいあなたは

+0

これはSQL Server 2012で利用できますか? –

+0

私はmysqlに基づいていますが、このリンクはSQLサーバのREGEXPに関するすべてを伝えることができますhttps://github.com/zzzprojects/Eval-SQL.NET/wiki/SQL-Server-Regex-%7C-Use-regular-expression-to -search、-replace-and-split-text-in-SQL私はそれが動作すると思います。 :) – israel

関連する問題