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


Функции со строковыми значениями — concat

Применимо к:SQL Server

Принимает от нуля и более строк и возвращает строку, содержащую результат сцепления переданных аргументов.

Синтаксис

  
fn:concat ($string as xs:string?  
           ,$string as xs:string?  
           [, ...]) as xs:string  

Аргументы

$string
Необязательная строка для сцепления.

Замечания

Функции требуется как минимум два аргумента. Если в качестве аргумента передана пустая последовательность, она трактуется как строка нулевой длины.

Дополнительные символы (суррогатные пары)

Поведение суррогатных пар в функциях XQuery зависит от уровня совместимости базы данных и, в некоторых случаях, от URI-кода пространства имен по умолчанию для функций. Дополнительные сведения см. в разделе "Функции XQuery с суррогатной поддержкой" статьи "Критические изменения функций ядра СУБД в SQL Server 2016". Дополнительные сведения см. в разделе ALTER DATABASE Compatibility Level (Transact-SQL) и Параметры сортировки и Поддержка Юникода.

Примеры

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

О. Применение функции concat() языка XQuery для объединения строк

Для указанного изделия запрос возвращает строку, полученную сцеплением гарантийного строка и гарантийных обязательств. В документе <Warranty> описания каталога элемент состоит из дочерних>WarrantyPeriod< элементов.<Description>

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
SELECT CatalogDescription.query('  
    <Product   
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"  
        ProductModelName = "{ sql:column("PD.Name") }" >  
        {   
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",  
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))   
         }   
     </Product>  
 ') as Result  
FROM Production.ProductModel PD  
WHERE  PD.ProductModelID=28  
  

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

  • В предложении SELECT CatalogDescription — это столбец типа XML . Поэтому используется метод query() (тип данных XML), Instructions.query(). Инструкция XQuery задана как аргумент метода query.

  • Запрос к документу выполняется при использовании пространства имен, Поэтому ключевое слово пространства имен используется для определения префикса пространства имен. Дополнительные сведения см. в разделе XQuery Prolog.

Результат:

<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>  

Приведенный запрос получает сведения об указанном изделии. Следующий запрос получает те же сведения по всем изделиям, для которых имеются описания каталога XML. Метод exist() типа данных XML в предложении WHERE возвращает значение True, если XML-документ в строках имеет><ProductDescriptionэлемент.

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
  
SELECT CatalogDescription.query('  
    <Product   
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"   
        ProductName = "{ sql:column("PD.Name") }" >  
        {   
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",  
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))   
         }   
     </Product>  
 ') as Result  
FROM Production.ProductModel PD  
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1  
  

Обратите внимание, что логическое значение, возвращаемое методом exist() типа XML, сравнивается с 1.

Ограничения реализации

Существуют следующие ограничения:

  • Функция concat() в SQL Server принимает только значения типа xs:string. Все остальные значения должны быть явно приведены в xs:string или xdt:untypedAtomic.

См. также

Функции XQuery для типа данных XML