Вопрос по xml, sql – Поиск в XML с помощью LIKE или аналогичной операции полного поиска

22

Я хочу найти столбец с XML-значением, чтобы увидеть, содержит ли строка Я не знаю схемы, я хочу знать, содержится ли строка где-либо вообще. Я не знаю, будет ли XPATH работать в этой ситуации.

Эквивалент

<code>Select s.Name, ts.ValueXML from table t (nolock) 
join table2 ts (nolock) on t.key_Id = ts.key_Id
join table3 s (nolock) on ts.key_Id=s.key_Id
where s.Name like '%Lab%' and ts.ValueXML  like '%PreviewDateRange%'
</code>

ERROR: Argument data type xml is invalid for argument 1 of like function.

Соответствующийts Столбцы таблицы

ValueXml (XML(.), null)

Элемент, который я ищу, должен быть атрибутом. Поэтому, если вышеприведенное невозможно, то все, что содержит этот атрибут, будет хорошей альтернативой.

Не могли бы вы опубликовать определение таблицы и пометить вопрос типом используемой СУБД? dasblinkenlight
Это должно работать. Не могли бы вы показать пример, где это не работает? dasblinkenlight

Ваш Ответ

2   ответа
3

SELECT *
FROM MyTable
WHERE MyXmlMetadataColumn.exist('//*/text()[contains(upper-case(.),upper-case("MySearchTerm"))]') = 1

Мне кажется, это работает нормально, а также не ищет имена тегов XML в качестве решения, предоставленного & quot; dasblinkenlight & quot ;.

Я не знаю, насколько это эффективно.

47

безусловно, не самый быстрый для выполнения) способ - привести ваш столбец кnvarchar(max) прежде чем передать егоlike:

cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
Error: User Rate Limit Exceeded P.Brian.Mackey
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededsqlfiddleError: User Rate Limit Exceeded

Похожие вопросы