Aracılığıyla paylaş


alt dize işlevi (XQuery)

Sayı değerinin bir parçası $sourceString, başlatma değeri tarafından belirtilen konumda $startingLoc, ve karakter sayısı değeri tarafından belirtilen devam $length.

Sözdizimi

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?

Bağımsız değişkenler

  • $sourceString
    Kaynak dize.

  • $startingLoc
    Alt dize başladığı Kaynak dizedeki başlangıç noktası.Bu değer, negatif veya 0 ise, yalnızca bu karakterleri pozisyonlarda sıfırdan büyük döndürülür.Uzunluğundan büyükse $sourceString, sıfır uzunluklu dize döndürdü.

  • $length
    [isteğe bağlı] Almak için karakter sayısı.Belirtilmezse, tüm karakterler içinde belirtilen konumdan verdiği $startingLoc kadar sonuna dize.

Açıklamalar

Karakterler, üç bağımsız işlev sürüm döndürür $sourceString , pozisyon $p obeys:

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

Değeri $length değeri, karakter sayısından daha büyük olabilir $sourceString izleyerek başlangıç konumu.Bu durum, alt dizenin sonuna kadar olan karakterleri verir $sourceString.

İlk karakteri bir dize 1 konumunda bulunur.

Varsa değeri $sourceString boş sırası ise, sıfır uzunluklu dize. ele alınırBaşka türlü, $startingLoc veya $length boş sırası, boş sırası döndürülür.

Örnekler

Bu konuda çeşitli içinde depolanan xml örnekleri karşı XQuery örnekler sağlar xml sütunları yazın AdventureWorks2008R2 veritabanı.Bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.

A.Substring() XQuery kullanarak işlev kısmi Özet ürün modeli açıklamaları almak için

Ürün modeli açıklayan metnin ilk 50 karakterini sorgu alır <Summary> öğesi belge.

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;

Önceki sorgudan aşağıdakilere dikkat edin:

  • The string() function returns the string value of the<Summary> element.Bu işlev, çünkü kullanılan <Summary> metin ve alt öğeler (html) biçimlendirme öğeleri, öğe içerir ve bu öğeleri atlamak ve almak tüm metin.

  • The substring() function retrieves the first 50 characters from the string value retrieved by the string().

Bu kısmi bir sonucudur:

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>

...

Uygulama kısıtlamaları

Sınırlamalar şunlardır:

  • sql Server gerektirir $startingLoc ve $length parameters türü xs:decimal xs:double. yerine, olması için

  • SQL Server allows$startingLoc and $length to be the empty sequence, because the empty sequence is a possible value as a result of dynamic errors being mapped to ().

  • Unicode utf-16 temsilci çiftleri bir yerine iki karakter olarak sayılır.