Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Mengembalikan panjang string dalam karakter.
Sintaks
fn:string-length() as xs:integer
fn:string-length($arg as xs:string?) as xs:integer
Argumen
$arg
String sumber yang panjangnya akan dihitung.
Keterangan
Jika nilai $arg adalah urutan kosong, nilai xs:integer 0 dikembalikan.
Perilaku pasangan pengganti dalam fungsi XQuery tergantung pada tingkat kompatibilitas database. Jika tingkat kompatibilitas adalah 110 atau yang lebih baru, setiap pasangan pengganti dihitung sebagai satu karakter. Untuk tingkat kompatibilitas sebelumnya, mereka dihitung sebagai dua karakter. Untuk informasi selengkapnya, lihat MENGUBAH Tingkat Kompatibilitas DATABASE (Transact-SQL) dan Kolase dan Dukungan Unicode.
Jika nilai berisi karakter Unicode 4-byte yang diwakili oleh dua karakter pengganti, SQL Server akan menghitung karakter pengganti satu per satu.
Panjang string() tanpa parameter hanya dapat digunakan di dalam predikat. Misalnya, kueri berikut mengembalikan <ROOT> elemen:
DECLARE @x xml;
SET @x='<ROOT>Hello</ROOT>';
SELECT @x.query('/ROOT[string-length()=5]');
Karakter Tambahan (Pasangan Pengganti)
Perilaku pasangan pengganti dalam fungsi XQuery tergantung pada tingkat kompatibilitas database dan, dalam beberapa kasus, pada URI namespace default untuk fungsi. Untuk informasi selengkapnya, lihat bagian "XQuery Functions Are Surrogate-Aware" dalam topik Melanggar Perubahan pada Fitur Mesin Database di SQL Server 2016. Lihat juga ALTER DATABASE Compatibility Level (Transact-SQL) dan Collation and Unicode Support.
Contoh
Topik ini menyediakan contoh XQuery terhadap instans XML yang disimpan di berbagai kolom jenis xml di database AdventureWorks.
J. Menggunakan fungsi string-length() XQuery untuk mengambil produk dengan deskripsi ringkasan panjang
Untuk produk yang deskripsi ringkasannya lebih besar dari 50 karakter, kueri berikut mengambil ID produk, panjang deskripsi ringkasan, dan ringkasan itu <Summary> sendiri, elemen .
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;
Perhatikan hal berikut ini dari kueri sebelumnya:
Kondisi dalam klausa WHERE hanya mengambil baris tempat deskripsi ringkasan yang disimpan dalam dokumen XML lebih panjang dari 200 karakter. Ini menggunakan metode value() (jenis data XML).
Klausa SELECT hanya membuat XML yang Anda inginkan. Ini menggunakan metode query() (jenis data XML) untuk membuat XML dan menentukan ekspresi XQuery yang diperlukan untuk mengambil data dari dokumen XML.
Ini adalah hasil parsial:
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. Menggunakan fungsi string-length() XQuery untuk mengambil produk yang deskripsi garansinya pendek
Untuk produk yang deskripsi garansinya kurang dari 20 karakter, kueri berikut mengambil XML yang mencakup ID produk, panjang, deskripsi garansi, dan elemen itu <Warranty> sendiri.
Garansi adalah salah satu fitur produk. Elemen turunan opsional <Warranty> mengikuti setelah <Features> elemen .
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;
Perhatikan hal berikut ini dari kueri sebelumnya:
pd dan wm adalah awalan namespace yang digunakan dalam kueri ini. Mereka mengidentifikasi namespace yang sama yang digunakan dalam dokumen yang sedang dikueri.
XQuery menentukan perulangan FOR berlapis. Perulangan FOR luar diperlukan, karena Anda ingin mengambil atribut ProductModelID dari <
ProductDescription> elemen . Perulangan FOR dalam diperlukan, karena Anda hanya menginginkan produk yang memiliki deskripsi fitur garansi yang panjangnya kurang dari 20 karakter.
Ini adalah hasil parsial:
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>
...