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: Az SQL Server 2016 (13.x) és újabb verziói
Az Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics végpontja a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
SQL Database-ben a Microsoft Fabricben
STRING_SPLIT egy táblaértékű függvény, amely egy sztringet részsztringek soraira osztja fel egy megadott elválasztó karakter alapján.
Kompatibilitási szint 130
STRING_SPLIT a kompatibilitási szintnek legalább 130-nak kell lennie. Ha a szint kisebb, mint 130, az adatbázismotor nem találja a függvényt STRING_SPLIT .
Az adatbázisok kompatibilitási szintjének módosításához tekintse meg vagy módosítsa az adatbázis kompatibilitási szintjét.
Megjegyzés:
Az Azure Synapse Analyticsben nincs szükség kompatibilitási konfigurációra STRING_SPLIT .
Transact-SQL szintaxis konvenciók
Szemantika
STRING_SPLIT ( string , separator [ , enable_ordinal ] )
Arguments
karakterlánc
Bármilyen típusú kifejezés (például nvarchar, varchar, nchar vagy char).
elválasztó
Bármely karaktertípus (például nvarchar(1), varchar(1), nchar(1) vagy char(1)) egyetlen karakterkifejezése, amely elválasztóként szolgál összefűzött részszűkítésekhez.
enable_ordinal
A következőkre vonatkozik: Azure SQL Database, felügyelt Azure SQL-példány, Azure Synapse Analytics (csak kiszolgáló nélküli SQL-készlet) és SQL Server 2022 (16.x) és újabb verziók
Egy int vagy bitkifejezés , amely jelölőként szolgál a ordinal kimeneti oszlop engedélyezéséhez vagy letiltásához. Az oszlop értéke1.ordinal Ha enable_ordinal nincs megadva, NULLvagy értéke 0van, az ordinal oszlop le van tiltva.
Visszatérési típusok
Ha a ordinal kimeneti oszlop nincs engedélyezve, egy egyoszlopos táblát ad vissza, STRING_SPLIT amelynek sorai az alsztringek. Az oszlop neve .value
Nvarchar értéket ad vissza, ha a bemeneti argumentumok bármelyike nvarchar vagy nchar. Ellenkező esetben varchart ad vissza. A visszatérési típus hossza megegyezik a sztring argumentum hosszával.
Ha a enable_ordinal argumentum értéke egy 1másik, elnevezett ordinal oszlop lesz visszaadva, amely az egyes részsztringek bemeneti sztringben elfoglalt pozíciójának 1-alapú indexértékéből áll. A visszatérési típus nagy.
Megjegyzések
STRING_SPLIT olyan sztringet ad meg, amely elválasztott részsztringeket tartalmaz, és egy karaktert ad meg, amelyet elválasztóként vagy elválasztóként használ. A függvény opcionálisan támogat egy harmadik argumentumot, amelynek értéke 0 letiltja vagy 1 engedélyezi a ordinal kimeneti oszlopot.
STRING_SPLIT egy vagy kétoszlopos táblát ad ki a enable_ordinal argumentumtól függően.
Ha enable_ordinal ki van
NULLhagyva, vagy értéke0van, egy oszlopból álló táblát ad vissza,STRING_SPLITamelynek sorai tartalmazzák az alsztringeket. A kimeneti oszlop neve a következővalue: .Ha enable_ordinal értéke
1, a függvény egy kétoszlopos táblát ad vissza, beleértve azt azordinaloszlopot is, amely az eredeti bemeneti sztring részsztringjeinek 1-alapú indexértékéből áll.
A enable_ordinal argumentumnak állandó értéknek kell lennie, nem oszlopnak vagy változónak. Bit- vagyint adattípusnak is kell lennie, amelynek értéke vagy 0értéke 1 . Ellenkező esetben a függvény hibát jelez.
A kimeneti sorok bármilyen sorrendben lehetnek. A sorrend nem garantált, hogy megegyezik a bemeneti sztring részsztringjeinek sorrendjében. A végleges rendezési sorrendet felülbírálhatja az utasítás záradékával ORDER BYSELECT , például ORDER BY valueORDER BY ordinal.
0x0000 A (char(0)) a Windows-rendezésekben nem definiált karakter, és nem szerepelhet a fájlban STRING_SPLIT.
Üres nulla hosszúságú részsztringek akkor jelennek meg, ha a bemeneti sztring az elválasztó karakter két vagy több egymást követő előfordulását tartalmazza. Az üres részszúrások ugyanúgy lesznek kezelve, mint az egyszerű részstringek. Az üres részszűrést tartalmazó sorokat szűrheti például WHEREa WHERE value <> '' záradék használatával. Ha a bemeneti sztring az NULL, a STRING_SPLIT táblaértékelt függvény üres táblát ad vissza.
A következő SELECT utasítás például a szóköz karaktert használja elválasztóként:
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
Egy gyakorlatfuttatás során az előző SELECT eredménytábla a következő eredményt adja vissza:
| value |
|---|
Lorem |
ipsum |
dolor |
sit |
amet. |
Az alábbi példa lehetővé teszi az oszlop számára az ordinal opcionális harmadik argumentum átadását 1 :
SELECT * FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ', 1);
Ez az utasítás ezután a következő eredménytáblát adja vissza:
| value | sorrendi |
|---|---|
Lorem |
1 |
ipsum |
2 |
dolor |
3 |
sit |
4 |
amet. |
5 |
Példák
A. Vesszővel elválasztott értéksztring felosztása
Elemezheti az értékek vesszővel tagolt listáját, és visszaadja az összes nem üres jogkivonatot:
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'
SELECT value
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> '';
STRING_SPLIT üres sztringet ad vissza, ha nincs semmi az elválasztó között. A feltétel RTRIM(value) <> '' eltávolítja az üres jogkivonatokat.
B. Vesszővel elválasztott értéksztring felosztása egy oszlopban
A terméktábla oszlopa vesszővel elválasztott címkéket tartalmaz az alábbi példában:
| Termékazonosító | Név | Címkék |
|---|---|---|
1 |
Full-Finger Gloves |
clothing,road,touring,bike |
2 |
LL Headset |
bike |
3 |
HL Mountain Frame |
bike,mountain |
A következő lekérdezés átalakítja a címkék listáját, és összekapcsolja őket az eredeti sortal:
SELECT ProductId, Name, value
FROM Product
CROSS APPLY STRING_SPLIT(Tags, ',');
Itt van az eredmények összessége.
| Termékazonosító | Név | Érték |
|---|---|---|
1 |
Full-Finger Gloves |
clothing |
1 |
Full-Finger Gloves |
road |
1 |
Full-Finger Gloves |
touring |
1 |
Full-Finger Gloves |
bike |
2 |
LL Headset |
bike |
3 |
HL Mountain Frame |
bike |
3 |
HL Mountain Frame |
mountain |
Megjegyzés:
A kimenet sorrendje eltérő lehet, mivel a sorrend nem garantáltan megfelel a bemeneti sztringben lévő részsztringek sorrendjének.
C. Összesítés értékek szerint
A felhasználóknak létre kell hozniuk egy jelentést, amely megjeleníti az egyes címkékhez tartozó termékek számát, a termékek száma szerint rendezve, és csak a kétnál több termékkel rendelkező címkék szűréséhez.
SELECT value as tag, COUNT(*) AS [number_of_articles]
FROM Product
CROSS APPLY STRING_SPLIT(Tags, ',')
GROUP BY value
HAVING COUNT(*) > 2
ORDER BY COUNT(*) DESC;
D. Keresés címkeérték szerint
A fejlesztőknek kulcsszavak alapján kell létrehozniuk a cikkeket kereső lekérdezéseket. A következő lekérdezéseket használhatják:
Egyetlen címkével (ruházattal) rendelkező termékek keresése:
SELECT ProductId, Name, Tags
FROM Product
WHERE 'clothing' IN (SELECT value FROM STRING_SPLIT(Tags, ','));
Két megadott címkével rendelkező termékek keresése (ruházat és út):
SELECT ProductId, Name, Tags
FROM Product
WHERE EXISTS (SELECT *
FROM STRING_SPLIT(Tags, ',')
WHERE value IN ('clothing', 'road'));
E. Sorok keresése értéklista szerint
A fejlesztőknek olyan lekérdezést kell létrehozniuk, amely az azonosítók listája alapján keres cikkeket. A következő lekérdezéseket használhatják:
SELECT ProductId, Name, Tags
FROM Product
JOIN STRING_SPLIT('1,2,3',',')
ON value = ProductId;
Az előző STRING_SPLIT használat egy gyakori antipattern pótlása. Egy ilyen antipattern magában foglalhatja egy dinamikus SQL-sztring létrehozását az alkalmazásrétegben vagy a Transact-SQL-ben. Vagy egy antipattern az operátor használatával LIKE érhető el. Lásd a következő példautasítást SELECT :
SELECT ProductId, Name, Tags
FROM Product
WHERE ',1,2,3,' LIKE '%,' + CAST(ProductId AS VARCHAR(20)) + ',%';
F. Sorok keresése sorszámértékek szerint
Az alábbi utasítás az összes páros indexértékkel rendelkező sort megkeresi:
SELECT *
FROM STRING_SPLIT('Austin,Texas,Seattle,Washington,Denver,Colorado', ',', 1)
WHERE ordinal % 2 = 0;
A fenti utasítás a következő táblázatot adja vissza:
| value | sorrendi |
|---|---|
| Texas | 2 |
| Washington | 4 |
| Colorado | 6 |
G. Sorok sorrendje sorszámértékek szerint
Az alábbi utasítás a bemeneti sztring felosztott részsztringértékeit és azok sorszámértékeit adja vissza, az ordinal oszlop szerint rendezve:
SELECT * FROM STRING_SPLIT('E-D-C-B-A', '-', 1) ORDER BY ordinal DESC;
A fenti utasítás a következő táblázatot adja vissza:
| value | sorrendi |
|---|---|
| A | 5 |
| B | 4 |
| C | 3 |
| D | 2 |
| E | 1 |