文字列値に使用する関数 - substring

適用対象: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)照合順序と Unicode のサポートに関するページも参照してください。

実装の制限事項

SQL Serverでは、$startingLocパラメーターと$length パラメーターが xs:double ではなく xs:decimal 型である必要があります。

SQL Serverでは動的エラーが () にマップされた結果として空のシーケンスが可能な値であるため、$startingLocと$lengthを空のシーケンスにすることができます。

このトピックでは、データベース内のさまざまな xml 型列に格納されている XML インスタンスに対する XQuery の例を AdventureWorks2022 示します。

A. substring() 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() 関数は、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>  
...  

参照

xml データ型に対する XQuery 関数