문자열 값의 함수 - concat
적용 대상:SQL Server
0개 이상의 문자열을 인수로 허용하고 이러한 각 인수의 값을 연결하여 만든 문자열을 반환합니다.
구문
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
인수
$string
연결할 선택적 문자열입니다.
설명
함수에는 두 개 이상의 인수가 필요합니다. 인수가 빈 시퀀스인 경우 길이가 0인 문자열로 처리됩니다.
보조 문자(서로게이트 쌍)
XQuery 함수에서 서로게이트 쌍의 동작은 데이터베이스 호환성 수준 및 경우에 따라 함수의 기본 네임스페이스 URI에 따라 달라집니다. 자세한 내용은 SQL Server 2016의 데이터베이스 엔진 기능 주요 변경 내용 항목에서 "XQuery 함수는 서로게이트 인식" 섹션을 참조하세요. ALTER DATABASE 호환성 수준(Transact-SQL) 및 데이터 정렬 및 유니코드 지원도 참조하세요.
예
이 항목에서는 AdventureWorks 샘플 데이터베이스의 다양한 xml 형식 열에 저장된 XML 인스턴스에 대한 XQuery 예제를 제공합니다.
A. 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 문은 쿼리 메서드에 대한 인수로 지정됩니다.
쿼리가 실행되는 문서는 네임스페이스를 사용합니다. 따라서 네임스페이 스 키워드는 네임스페 이스의 접두사를 정의하는 데 사용됩니다. 자세한 내용은 XQuery 프롤로그를 참조 하세요.
결과는 다음과 같습니다.
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
이전 쿼리는 특정 제품에 대한 정보를 검색합니다. 다음 쿼리는 XML 카탈로그 설명이 저장되는 모든 제품에 대해 동일한 정보를 검색합니다. 행의 XML 문서에 요소가 있으면 WHERE 절에 있는 xml 데이터 형식의 exist() 메서드가 True를 <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
xml 형식의 exist() 메서드에서 반환된 부울 값은 1과 비교됩니다.
구현 제한 사항
제한 사항은 다음과 같습니다.
- SQL Server의 concat() 함수는 xs:string 형식의 값만 허용합니다. 그 밖의 다른 값은 명시적으로 xs:string 또는 xdt:untypedAtomic으로 캐스팅되어야 합니다.