Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dizinin uzunluğunu karakter olarak döndürür.
Syntax
fn:string-length() as xs:integer
fn:string-length($arg as xs:string?) as xs:integer
Arguments
$arg
Uzunluğu hesaplanacak kaynak dizisi.
Remarks
Eğer $arg'nin değeri boş bir diziye ise, 0'ın xs:tam sayı değeri döner.
XQuery fonksiyonlarındaki vekil çiftlerin davranışı, veritabanı uyumluluk seviyesine bağlıdır. Uyumluluk seviyesi 110 veya daha üzerindeyse, her vekil çift tek bir karakter olarak sayılır. Daha erken uyumluluk seviyeleri için iki karakter olarak sayılırlar. Daha fazla bilgi için Uyumluluk Seviyesi (Transact-SQL) ve Koleksiyon ve Unicode Desteği bölümlerine bakınızALTER DATABASE.
Değer iki vekil karakterle temsil edilen 4 baytlık bir Unicode karakteri içeriyorsa, SQL Server vekil karakterleri tek tek sayar.
Parametresi olmayan dizis-length() yalnızca bir önlem içinde kullanılabilir. Örneğin, aşağıdaki sorgu elemanı <ROOT> döndürür:
DECLARE @x xml;
SET @x='<ROOT>Hello</ROOT>';
SELECT @x.query('/ROOT[string-length()=5]');
Ek Karakterler (Vekil Çiftler)
XQuery fonksiyonlarındaki vekil çiftlerin davranışı, veritabanı uyumluluk seviyesine ve bazı durumlarda fonksiyonlar için varsayılan isim alanı URI'sine bağlıdır. Daha fazla bilgi için Uyumluluk Seviyesi (Transact-SQL) ve Koleksiyon ve Unicode Desteği bölümlerine bakınızALTER DATABASE.
Examples
Bu konu, AdventureWorks veritabanındaki çeşitli xml tipi sütunlarda depolanan XML örneklerine karşı XQuery örnekleri sunmaktadır.
A. Uzun özet açıklamalara sahip ürünleri almak için string-length() XQuery fonksiyonunu kullanmak
Özet açıklaması 50 karakterden büyük olan ürünler için, aşağıdaki sorgu ürün kimliğini, özet açıklamasının uzunluğunu ve özetin kendisini, <Summary> yani elemanı alır.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' as pd)
SELECT CatalogDescription.query('
<Prod ProductID= "{ /pd:ProductDescription[1]/@ProductModelID }" >
<LongSummary SummaryLength =
"{string-length(string( (/pd:ProductDescription/pd:Summary)[1] )) }" >
{ string( (/pd:ProductDescription/pd:Summary)[1] ) }
</LongSummary>
</Prod>
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.value('string-length( string( (/pd:ProductDescription/pd:Summary)[1]))', 'decimal') > 200;
Önceki sorgudan aşağıdakilere dikkat edin:
WHERE maddesindeki koşul, yalnızca XML belgesinde depolanan özet açıklamasının 200 karakterden uzun olduğu satırları alır. Value() yöntemini (XML veri türü) kullanır.
SELECT maddesi sadece istediğiniz XML'i oluşturur. XML'i oluşturmak ve XML belgesinden veri almak için gerekli XQuery ifadesini belirtmek için query() yöntemini (XML veri türü) kullanır.
Bu kısmi bir sonuçdur:
Result
-------------------
<Prod ProductID="19">
<LongSummary SummaryLength="214">Our top-of-the-line competition
mountain bike. Performance-enhancing options include the
innovative HL Frame, super-smooth front suspension, and
traction for all terrain.
</LongSummary>
</Prod>
...
B. Garanti açıklamaları kısa olan ürünleri almak için string-length() XQuery fonksiyonunu kullanarak
Garanti açıklamaları 20 karakterden az olan ürünler için, aşağıdaki sorgu ürün kimliği, uzunluğu, garanti açıklaması ve öğenin <Warranty> kendisini içeren XML dosyasını alır.
Garanti, ürün özelliklerinden biridir. Elementten<Warranty> sonra isteğe bağlı <Features> bir çocuk eleman gelir.
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
for $ProdDesc in /pd:ProductDescription,
$pf in $ProdDesc/pd:Features/wm:Warranty
where string-length( string(($pf/wm:Description)[1]) ) < 20
return
<Prod >
{ $ProdDesc/@ProductModelID }
<ShortFeature FeatureDescLength =
"{string-length( string(($pf/wm:Description)[1]) ) }" >
{ $pf }
</ShortFeature>
</Prod>
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('/pd:ProductDescription')=1;
Önceki sorgudan aşağıdakilere dikkat edin:
PD ve WM bu sorguda kullanılan isim alanı önekleridir. Sorgulanan belgede kullanılan aynı isim alanlarını tanımlar.
XQuery, iç içe FOR döngüsü belirler. Dış FOR döngüsü gereklidir, çünkü elemanın ProductModelID özniteliklerini <
ProductDescription> almak istersiniz. Dahili FOR döngüsü gereklidir, çünkü sadece garanti özellikleri 20 karakterden kısa olan ürünleri tercih edersiniz.
Kısmi sonuç şu şekildedir:
Result
-------------------------
<Prod ProductModelID="19">
<ShortFeature FeatureDescLength="15">
<wm:Warranty
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
</ShortFeature>
</Prod>
...