次の方法で共有


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 のどちらかが空のシーケンスの場合は、空のシーケンスが返されます。

補助文字 (サロゲート ペア)

XQuery 関数におけるサロゲート ペアの動作は、データベースの互換性レベルに左右されます。場合によっては、関数の既定の名前空間 URI に左右されることもあります。 詳細については、「SQL Server 2012 におけるデータベース エンジン機能の重大な変更」の「サロゲート対応の XQuery 関数」を参照してください。 「ALTER DATABASE 互換性レベル (Transact-SQL)」および「照合順序と Unicode のサポート」も参照してください。

実装の制限事項

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

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

使用例

このトピックでは、 AdventureWorks2012 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。

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 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 関数