다음을 통해 공유


concat 함수(XQuery)

0개 이상의 문자열을 인수로 허용하고 이러한 각 인수의 값을 연결하여 만든 문자열을 반환합니다.

구문

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

인수

  • $string
    연결하기 위한 문자열(옵션)입니다.

주의

함수에는 최소한 둘 이상의 인수가 필요합니다. 인수가 빈 시퀀스인 경우 길이가 0인 문자열로 처리됩니다.

이 항목에서는 AdventureWorks 예제 데이터베이스의 다양한 xml 유형 열에 저장된 XML 인스턴스에 대한 XQuery 예를 제공합니다. 이러한 열에 대한 개요는 AdventureWorks 데이터베이스의 xml 데이터 형식 표시를 참조하십시오.

1. 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 문은 쿼리 메서드에 대한 인수로 지정됩니다.

  • 쿼리가 실행되는 문서는 네임스페이스를 사용합니다. 따라서 네임스페이스에 대한 접두사를 정의하는 데 namespace 키워드가 사용됩니다. 자세한 내용은 XQuery 프롤로그를 참조하십시오.

다음은 결과입니다.

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

앞의 쿼리는 특정한 제품에 대한 정보를 검색합니다. 다음 쿼리는 XML 카탈로그 설명이 저장된 모든 제품에 대해 동일한 정보를 검색합니다. WHERE 절에 있는 xml 데이터 유형의 exist() 메서드는 행의 XML 문서에 <ProductDescription> 요소가 있을 경우 True를 반환합니다.

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

xml 유형의 exist() 메서드에서 반환하는 부울 값을 1과 비교합니다.

구현 시 제한 사항

제한 사항은 다음과 같습니다.

  • SQL Server의 concat() 함수는 xs:string 형식의 값만 허용합니다 그 밖의 다른 값은 명시적으로 xs:string 또는 xdt:untypedAtomic으로 캐스팅되어야 합니다.