Alt DIZE işlevi (XQuery)
Döner değerinin bir parçası $sourceString, değeri tarafından belirtilen konumda başlayan $startingLoc,değeri tarafından belirtilen karakter sayısı 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 dizesi.$startingLoc
Alt dize başladığı Kaynak dizedeki başlangıç noktası. Bu değer 0 veya negatif 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 bir dize döndürülür.$length
[isteğe bağlı] Almak için karakter sayısı. Belirtilmezse, tüm karakterler içinde belirtilen konumdan döndürür $startingLocdizenin sonuna kadar.
Açıklamalar
İşlevin üç değişkeni sürümü karakterleri döndürür $sourceStringolan pozisyon $pitaat:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
Değeri $lengthkarakter değeri daha büyük olabilir $sourceStringbaşlama pozisyonunu takip. Bu durumda, alt sonuna kadar olan karakterleri verir $sourceString.
Bir dizenin ilk karakter 1 konumunda bulunur.
Eğer değeri $sourceStringboş sırası ise sıfır uzunluklu dize işlenir. Aksi halde, ya da, $startingLocya $lengthboş sırası, boş sırası döndürülür.
İkincil Karakterler (Yedek Çiftler)
Veritabanı uyumluluk düzeyi ve bazı durumlarda, varsayılan ad alanı URI işlevleri için vekil çiftleri XQuery işlevleri davranışını bağlıdır. Daha fazla bilgi için bkz: "XQuery işlevleri olan vekil tanımayan" bölümü konudaki En son değişiklikleri SQL Server 2012 veritabanı altyapısı özellikleri. Also see alter database uyumluluk düzeyi (Transact-sql) and Supplementary Characters.
Uygulama kısıtlamaları
SQL Server gerektirir $startingLocve $length parameterstürü xs: decimal xs: Double yerine olmak.
SQL Server sağlar $startingLocve $lengthboş sırası eşleştirilen () için dinamik hataları sonucu olası bir değer olduğundan, boş sırası olarak.
Örnekler
Bu konu çeşitli depolanan xml örnekleri karşı XQuery örnekler sağlar xml yazın sütunlarında AdventureWorks2012 veritabanı. Bu sütunlar genel bakış için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.
A.Kısmi Özet ürün modeli açıklamaları almak için substring() XQuery işlevini kullanma
Ürün modeli açıklayan metnin ilk 50 karakterini sorgu alır <Summary> ve belgedeki öğe.
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;
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:
String() işlevi döndürür dize değeri<Summary> öğesi. Bu işlev için kullanılan <Summary> öğesi içeriyor hem metin hem de alt öğelerini (html) biçimlendirme öğeleri, çünkü size bu unsurların atla ve tüm metni almak.
Substring() işlevi tarafından dize değeri ilk 50 karakterini alır 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>
...
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>
...