dize uzunluğu işlev (XQuery)
Dizenin uzunluğu karakter verir.
fn:string-length() as xs:integer
fn:string-length($arg as xs:string?) as xs:integer
Bağımsız değişkenler
- $arg
Kaynak dize uzunluğunu hesaplanması kullanmaktır.
Remarks
Değeri $arg boş bir sıra bir xs:Integer 0 değeri döndürdü.
Iki yedek karakterler tarafından temsil edilen 3 baytlı Unicode karakter değerini içeriyorsa SQL Server yedek karakterleri tek tek sayımını.
The dize-length() without a parameter can only be used inside a predicate.Örneğin, aşağıdaki döndürür sorgulayabilir. <ROOT> öğe:
declare @x xml
set @x='<ROOT>Hello</ROOT>'
select @x.query('/ROOT[string-length()=5]')
Örnekler
Bu konu, çeşitli içinde depolanan XML örnekleri karşı XQuery örnekler sağlar. XML türü sütunlarındaki AdventureWorks veritabanındaki.Konusuna genel bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks veritabanındaki.
C.Uzun Özet açıklamalarını ürünleri almak için dize-length() XQuery işlevini kullanma
Özet açıklaması 50 karakterden daha büyük ürünler için aşağıdaki sorgu, Özet açıklaması ve Özet, ürün KIMLIĞI alır <Summary> öğe.
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 yan tümcesinde koşul, yalnızca XML belgesinde depolanan Özet açıklama 200 karakterden uzun satırları alır.Kullandığı Value() yöntem (XML veri türü).
SELECT yan tümce, yalnızca istediğiniz XML oluşturur.Kullandığı Query() yöntem (XML veri türü) XML oluşturma ve XML belgesinden veri almak için gerekli XQuery ifade belirtin.
Bu kısmi bir sonucudur:
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.dize-length() XQuery işlev, garanti çok kısa açıklamalardır ürünleri almak için kullanma
20'Den az karakter uzunluğunda, garanti açıklamalardır ürünler için aşağıdaki sorgu, ürün KIMLIĞI, uzunluk, garanti Açıklama içeren bir XML alır ve <Warranty> öğenin kendisi.
Garanti, ürün özellikleri biridir.Bir isteğe bağlı <Warranty> sonra alt öğe izleyen <Features> öğe.
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 and WM var. Bu sorguda kullanılan ad önekleriBunlar, sorgulanan belgede kullanılan aynı ad alanları tanımlayın.
Döngü IÇIN bir iç içe geçmiş XQuery belirtir.Almak istediğiniz dış döngü IÇIN gerekir, çünkü Productmodelıd <ProductDescription> öğenin özniteliklerini.Döngü IÇIN iç gerekir, çünkü daha az 20 karakterden uzun garanti özellik açıklamaları olan ürünler istediğiniz.
Bu kısmi kaynaklanır:
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>
...