Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
A sztring hosszát adja vissza karakterekben.
Szintaxis
fn:string-length() as xs:integer
fn:string-length($arg as xs:string?) as xs:integer
Érvek
$arg
Forrássztring, amelynek hosszát ki kell számítani.
Megjegyzések
Ha a $arg értéke üres sorozat, a függvény egy xs:egész számot 0 értéket ad vissza.
Az XQuery-függvényekben a helyettesítő párok viselkedése az adatbázis kompatibilitási szintjétől függ. Ha a kompatibilitási szint 110 vagy újabb, minden helyettesítő pár egyetlen karakternek számít. A korábbi kompatibilitási szintek esetében ezek két karakternek számítanak. További információ: ALTER DATABASE kompatibilitási szintje (Transact-SQL) és rendezési és Unicode-támogatási.
Ha az érték egy 4 bájtos Unicode-karaktert tartalmaz, amelyet két helyettesítő karakter jelöl, az SQL Server egyenként megszámolja a helyettesítő karaktereket.
A paraméter nélküli karakterlánchossz() csak predikátumon belül használható. A következő lekérdezés például a <ROOT> elemet adja vissza:
DECLARE @x xml;
SET @x='<ROOT>Hello</ROOT>';
SELECT @x.query('/ROOT[string-length()=5]');
Kiegészítő karakterek (helyettesítő párok)
Az XQuery-függvényekben a helyettesítő párok viselkedése az adatbázis kompatibilitási szintjétől és bizonyos esetekben a függvények alapértelmezett névterének URI-jától függ. További információt az SQL Server 2016 adatbázismotor-funkcióinak kompatibilitástörő változásairóltémakör "XQuery Functions Are Surrogate-Aware" című szakaszában talál. Lásd még ALTER DATABASE kompatibilitási szintjét (Transact-SQL) és rendezési és Unicode-támogatási.
Példák
Ez a témakör XQuery-példákat tartalmaz az AdventureWorks-adatbázis különböző XML- típusú oszlopaiban tárolt XML-példányokra.
Egy. A string-length() XQuery függvény használata a hosszú összefoglaló leírású termékek lekéréséhez
Az 50 karakternél hosszabb összefoglaló leírású termékek esetében az alábbi lekérdezés lekéri a termékazonosítót, az összefoglaló leírás hosszát és magát az összegzést, a <Summary> elemet.
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;
Jegyezze fel az előző lekérdezésben szereplő következőket:
A WHERE záradékban szereplő feltétel csak azokat a sorokat kéri le, ahol az XML-dokumentumban tárolt összefoglaló leírás 200 karakternél hosszabb. A érték() metódust (XML-adattípus)használja.
A SELECT záradék csak a kívánt XML-fájlt hozza létre. A query() metódus (XML-adattípus) használatával hozza létre az XML-t, és megadja a szükséges XQuery-kifejezést az ADATOK XML-dokumentumból való lekéréséhez.
Ez egy részleges eredmény:
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. A string-length() XQuery függvény használatával lekérheti azokat a termékeket, amelyek garanciális leírása rövid
Azon termékek esetében, amelyek jótállási leírása 20 karakternél rövidebb, az alábbi lekérdezés lekéri a termékazonosítót, a hosszt, a jótállás leírását és magát a <Warranty> elemet tartalmazó XML-t.
A jótállás a termék egyik funkciója. A <Features> elem után egy választható <Warranty> gyermekelem következik.
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;
Jegyezze fel az előző lekérdezésben szereplő következőket:
lekérdezésben használt névtérelőtagok a pd és wm. Azonosítják a lekérdezett dokumentumban használt névtereket.
Az XQuery egy beágyazott FOR ciklust ad meg. A külső FOR ciklusra azért van szükség, mert le szeretné kérni a <
ProductDescription> elem ProductModelID attribútumait. A belső FOR ciklusra azért van szükség, mert csak azokat a termékeket szeretné használni, amelyek 20 karakternél rövidebb jótállási jellemzőkkel rendelkeznek.
Ez a részleges eredmény:
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>
...
Lásd még:
XQuery-függvények xml adattípusú