문자열 값의 함수 - 부분 문자열
적용 대상:SQL Server
$startingLoc 값으로 표시된 위치에서 시작하여 $sourceString 값의 일부를 반환하고 $length 값으로 표시된 문자 수에 대해 계속됩니다.
구문
fn:substring($sourceString as xs:string?,
$startingLoc as xs:decimal?) as xs:string?
fn:substring($sourceString as xs:string?,
$startingLoc as xs:decimal?,
$length as xs:decimal?) as xs:string?
인수
$sourceString
소스 문자열입니다.
$startingLoc
부분 문자열이 시작되는 원본 문자열의 시작점입니다. 이 값이 음수이거나 0이면 0보다 큰 위치에 있는 문자만 반환됩니다. $sourceString 길이보다 크면 길이가 0인 문자열이 반환됩니다.
$length
[선택 사항] 검색할 문자 수입니다. 지정하지 않으면 $startingLoc 지정된 위치에서 문자열의 끝까지 모든 문자를 반환합니다.
설명
함수에 3개의 인수를 지정하면 해당 위치 $sourceString
이 따르는 $p
의 문자가 반환됩니다.
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
$length 값은 시작 위치 다음에 $sourceString 값의 문자 수보다 클 수 있습니다. 이 경우 부분 문자열은 $sourceString 끝까지 문자를 반환합니다.
문자열의 첫 번째 문자는 위치 1에 있습니다.
$sourceString 값이 빈 시퀀스인 경우 길이가 0인 문자열로 처리됩니다. 그렇지 않으면 $startingLoc 또는 $length 빈 시퀀스인 경우 빈 시퀀스가 반환됩니다.
보조 문자(서로게이트 쌍)
XQuery 함수에서 서로게이트 쌍의 동작은 데이터베이스 호환성 수준 및 경우에 따라 함수의 기본 네임스페이스 URI에 따라 달라집니다. 자세한 내용은 SQL Server 2016의 데이터베이스 엔진 기능 주요 변경 내용 항목에서 "XQuery 함수는 서로게이트 인식" 섹션을 참조하세요. ALTER DATABASE 호환성 수준(Transact-SQL) 및 데이터 정렬 및 유니코드 지원도 참조하세요.
구현 제한 사항
SQL Server를 사용하려면 $startingLoc 및 $length 매개 변수 가 xs:double 대신 xs:decimal 형식이어야 합니다.
SQL Server는 빈 시퀀스가 ()에 매핑되는 동적 오류의 결과로 가능한 값이므로 $startingLoc 및 $length 빈 시퀀스가 될 수 있습니다.
예
이 항목에서는 데이터베이스의 다양한 xml 형식 열에 저장된 XML 인스턴스에 대한 XQuery 예제를 AdventureWorks2022
제공합니다.
A. 부분 문자열() XQuery 함수를 사용하여 부분 요약 제품 모델 설명 검색
쿼리는 문서의 요소인 제품 모델을 <Summary
> 설명하는 텍스트의 처음 50자를 검색합니다.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Prod>{ substring(string((/pd:ProductDescription/pd:Summary)[1]), 1, 50) }</Prod>
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('/pd:ProductDescription') = 1;
이전 쿼리의 다음 사항에 유의하세요.
string() 함수는 요소의 문자열 값을 반환합니다<
Summary
>. 이 함수는 요소에 <Summary
> 텍스트와 하위 요소(html 서식 요소)가 모두 포함되어 있고 이러한 요소를 건너뛰고 모든 텍스트를 검색하기 때문에 사용됩니다.substring() 함수는 문자열()에서 검색한 문자열 값에서 처음 50자를 검색합니다.
이는 부분적인 결과입니다.
ProductModelID Result
-------------- ----------------------------------------------------
19 <Prod>Our top-of-the-line competition mountain bike.</Prod>
23 <Prod>Suitable for any type of riding, on or off-roa</Prod>
...