文字列値に使用する関数 - substring
適用対象: SQL Server
$sourceStringの値の一部を、$startingLoc,の値で示される位置から始めて返し、$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)のとCollation と Unicode のサポートも参照してください。
実装の制限事項
SQL Server では、 $startingLoc パラメーターと $length パラメーター xs:double ではなく xs:decimal 型である必要があります。
SQL Server では、 $startingLoc と $length を空のシーケンスにすることができます。空のシーケンスは、動的エラーが () にマップされた結果として可能な値であるためです。
例
このトピックでは、AdventureWorks2022
データベースのさまざまな xml 型の列に格納されている XML インスタンスに対する XQuery の例を示します。
A. substring() XQuery 関数を使用して製品モデルの部分的な概要の説明を取得する
クエリは、製品モデルを記述するテキストの最初の 50 文字 (ドキュメント内の <Summary
> 要素) を取得します。
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()関数は、string()によって取得された文字列値から最初の 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>
...