Поделиться через


Функция contains (XQuery)

Возвращает значение типа xs:boolean, показывающее, содержит ли строка, указанная в аргументе $arg1, подстроку, указанную в аргументе $arg2.

Синтаксис

fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?

Аргументы

  • $arg1
    Строка для проверки.
  • $arg2
    Подстрока для поиска.

Замечания

Если $arg2 является строкой нулевой длины, функция возвратит значение True. Если $arg1 является строкой нулевой длины, а $arg2 — нет, функция возвратит значение False.

Если аргумент $arg1 или $arg2 представляет собой пустую последовательность, он рассматривается как строка нулевой длины.

Функция contains() использует для сравнения строк параметры сортировки в Юникоде для XQuery по умолчанию.

Длина искомой подстроки, указанной в качестве аргумента $arg2, не должна превышать 4 000 символов. Если длина указанной строки превышает 4 000 символов, возникнет динамическое условие ошибки и функция contains() вернет пустую последовательность вместо логического значения True или False. SQL Server 2005 не создает динамических ошибок в выражениях XQuery.

Примеры

В этом разделе рассматриваются примеры на языке XQuery, работающие с экземплярами XML, хранимыми в различных столбцах типа xml в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов xml-данных в базе данных AdventureWorks.

А. Использование функции contains() языка XQuery для поиска указанной строки

В следующем запросе осуществляется поиск продуктов, описание которых содержат слово «Aerodynamic». Для таких продуктов запрос возвращает идентификатор и элемент <Summary>.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
      <Prod>
         { /pd:ProductDescription/@ProductModelID }
         { /pd:ProductDescription/pd:Summary }
      </Prod>
 ') as Result
FROM Production.ProductModel
where CatalogDescription.value('
  contains( (/pd:ProductDescription/pd:Summary//*/text())[1], 
            "Aerodynamic")','bit')  = 1

Обратите внимание на следующее в предыдущем запросе:

  • Документ, описывающий модели продуктов, использует пространства имен. Таким образом, ключевое слово namespace определяет область видимости имен в прологе запроса на языке XQuery.
  • Предложение WHERE использует метод value() типа данных xml. Чтобы определить, содержится ли слово Aerodynamic в тексте <Summary>, метод value использует функцию contains() языка XQuery. Логическое значение, возвращаемое функцией contain(), преобразуется в значение типа bit. Затем оно сравнивается с 1.

Результат:

ProductModelID Result
-------------- ---------
28     <Prod ProductModelID="28">
        <pd:Summary xmlns:pd= 
          "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
         <p1:p xmlns:p1="http://www.w3.org/1999/xhtml">
           A TRUE multi-sport bike that offers streamlined riding and 
           a revolutionary design. Aerodynamic design lets you ride with 
          the pros, and the gearing will conquer hilly roads.</p1:p>
        </pd:Summary>
       </Prod>

См. также

Справочник

Применение функций XQuery к типу данных XML

Справка и поддержка

Получение помощи по SQL Server 2005