Sdílet prostřednictvím


Funkce pro řetězcové hodnoty – podřetězce

platí pro:SQL Server

Vrátí část hodnoty $sourceStringzačínající hodnotou $startingLoc, a pokračuje pro počet znaků označených hodnotou $length.

Syntax

  
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?  

Argumenty

$sourceString
Zdrojový řetězec.

$startingLoc
Počáteční bod ve zdrojovém řetězci, ze kterého začíná podřetězce. Pokud je tato hodnota záporná nebo 0, vrátí se pouze tyto znaky v pozicích větších než nula. Pokud je větší než délka $sourceString, vrátí se řetězec nulové délky.

$length
[volitelné] Počet znaků, které se mají načíst Pokud není zadaný, vrátí všechny znaky z umístění zadaného v $startingLoc až do konce řetězce.

Poznámky

Verze funkce se třemi argumenty vrátí znaky v $sourceString, jejichž pozice $p poslechne:

fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)

Hodnota $length může být větší než počet znaků v hodnotě $sourceString za počáteční pozicí. V tomto případě vrátí podřetětěr znaky až na konec $sourceString.

První znak řetězce se nachází na pozici 1.

Pokud je hodnota $sourceString prázdná sekvence, zpracuje se jako řetězec nulové délky. Jinak pokud je prázdná sekvence $startingLoc nebo $length, vrátí se prázdná sekvence.

Doplňkové znaky (náhradní dvojice)

Chování náhradních párů ve funkcích XQuery závisí na úrovni kompatibility databáze a v některých případech na výchozím identifikátoru URI oboru názvů pro funkce. Další informace najdete v části Funkce XQuery Jsou náhradní funkce v tématu Zásadní změny funkcí databázového stroje v SQL Serveru 2016. Viz také úroveň kompatibility ALTER DATABASE (Transact-SQL) a kolace a podporu kódování Unicode.

Omezení implementace

SQL Server vyžaduje, aby parametry $startingLoc a $length byly typu xs:decimal místo xs:double.

SQL Server umožňuje, aby $startingLoc a $length byly prázdnou sekvencí, protože prázdná sekvence je možnou hodnotou v důsledku namapování dynamických chyb na ().

Příklady

Toto téma obsahuje příklady XQuery pro instance XML uložené v různých xml sloupce typu v AdventureWorks2022 databázi.

A. Použití podřetězce() funkce XQuery k načtení částečných popisů souhrnného modelu produktu

Dotaz načte prvních 50 znaků textu, který popisuje model produktu, <Summary> prvek v dokumentu.

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;  

Všimněte si následujících věcí z předchozího dotazu:

  • Funkce string() vrátí řetězcovou hodnotu prvku<Summary>. Tato funkce se používá, protože prvek <Summary> obsahuje text i dílčí prvky (prvky formátování html) a protože tyto prvky přeskočíte a načtete celý text.

  • Funkce podřetězce načte prvních 50 znaků z řetězcové hodnoty načtené string().

Jedná se o částečný výsledek:

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>  
...  

Viz také

funkce XQuery proti datového typu XML