substring 関数 (XQuery)

$startingLoc の値で示された位置から $length の値で示された文字数分の $sourceString の値を返します。

構文

fn:substring($sourceString as xs:string?,
                          $startingLoc  as 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 の文字列として処理されます。$sourceString の値が空のシーケンスではなく、$startingLoc または $length のいずれかが空のシーケンスの場合は、空のシーケンスが返されます。

このトピックでは、AdventureWorks2008R2 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks2008R2 データベースの xml データ型表現」を参照してください。

A. XQuery の substring() 関数を使用して製品モデルの説明の概要の一部を取得する

このクエリは、製品モデルを説明するテキスト (XML ドキュメントの <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 の結果

-------------- -----------------------------------------

19 <Prod>Our top-of-the-line competition mountain bike.</Prod>

23 <Prod>Suitable for any type of riding, on or off-roa</Prod>

...

実装の制限事項

制限事項を次に示します。

  • SQL Server では、$startingLoc および $length parameters の型が xs:double ではなく xs:decimal である必要があります。

  • SQL Server では、空のシーケンスが () にマップされる動的エラーの結果の値になる場合があるため、$startingLoc および $length の値に空のシーケンスを使用することができます。

  • Unicode UTF-16 のサロゲート ペアは、1 文字ではなく 2 文字として計算されます。