У вас должно получиться это довольно легко:
SELECT *
FROM WebPageContent
WHERE data.value('(/PageContent/Text)[1]', 'varchar(100)') LIKE 'XYZ%'
.value
Метод дает фактическое значение, и вы можете определить , что должно быть возвращено как VARCHAR (), который вы можете проверить с заявлением LIKE.
Имейте в виду, это не будет очень быстро. Итак, если у вас есть определенные поля в вашем XML, которые вам нужно много проверять, вы можете:
- создать сохраненную функцию, которая получает XML и возвращает искомое значение в виде VARCHAR ()
- определите новое вычисляемое поле в вашей таблице, которое вызывает эту функцию, и сделайте его PERSISTED столбцом
При этом вы в основном «извлекаете» определенную часть XML в вычисляемое поле, сохраняете ее, а затем можете очень эффективно искать по ней (черт возьми: вы даже можете ИНДЕКСИРОВАТЬ это поле!).
Марк
Еще один вариант - преобразовать XML как nvarchar, а затем выполнить поиск данной строки, как если бы XML был полем nvarchar.
SELECT * FROM Table WHERE CAST(Column as nvarchar(max)) LIKE '%TEST%'
Мне нравится это решение, поскольку оно чистое, легко запоминающееся, его трудно испортить и его можно использовать как часть предложения where.
РЕДАКТИРОВАТЬ: как упоминает Клифф, вы можете использовать:
источник
Другой вариант - искать XML как строку, преобразовав ее в строку, а затем используя LIKE. Однако, поскольку вычисляемый столбец не может быть частью предложения WHERE, вам необходимо обернуть его в другой SELECT следующим образом:
SELECT * FROM (SELECT *, CONVERT(varchar(MAX), [COLUMNA]) as [XMLDataString] FROM TABLE) x WHERE [XMLDataString] like '%Test%'
источник
Это то, что я собираюсь использовать на основе ответа marc_s:
SELECT SUBSTRING(DATA.value('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)'),PATINDEX('%NORTH%',DATA.value('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)')) - 20,999) FROM WEBPAGECONTENT WHERE COALESCE(PATINDEX('%NORTH%',DATA.value('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)')),0) > 0
Возвратите подстроку поиска, в которой существует критерий поиска
источник