2016-09-09 3 views
1

Я хотел бы спросить, как выбрать только те записи из таблицы, в которой есть столбец с XML, который в их XML содержит определенный тег.SQL: выберите записи, имеющие тег 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> 

Любые примеры было бы здорово.

Большое спасибо!

+0

Если мы угадать структуру документа XML? – Igor

+0

Возможный дубликат [Как проверить, существует ли элемент в xml с помощью xpath?] (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

Тег Just HasProduct или тег HasProduct со значением = True? Ответ был обновлен. –

+0

Тег HasProduct со значением = True - значение, которое я считал несущественным, поскольку нет тега HasProduct со значением = False. Это либо тег, либо нет. –

0

попробовать

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

\ ш можно изменить любое значение поиска вы хотите

+0

Доступно ли это для SQL Server 2012? –

+0

i основан на mysql, но эта ссылка может рассказать все о REGEXP на сервере sql. Https://github.com/zzzprojects/Eval-SQL.NET/wiki/SQL-Server-Regex-%7C-Use-regular-expression-to -search, -replace-and-split-text-in-SQL, я думаю, что это работает. :) – israel

Смежные вопросы