Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2016 (13.x) i nowsze wersje
usługi Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
— punkt końcowy analizy SQL w usłudze Microsoft Fabric
Warehouse w
bazie danych Microsoft Fabric SQL Database w usłudze Microsoft Fabric
STRING_SPLIT to funkcja wartości tabeli, która dzieli ciąg na wiersze podciągów na podstawie określonego znaku separatora.
Poziom zgodności 130
STRING_SPLIT wymaga, aby poziom zgodności był co najmniej 130. Gdy poziom jest mniejszy niż 130, aparat bazy danych nie może odnaleźć STRING_SPLIT funkcji.
Aby zmienić poziom zgodności bazy danych, zobacz Wyświetlanie lub zmienianie poziomu zgodności bazy danych.
Uwaga / Notatka
Konfiguracja zgodności nie jest wymagana w STRING_SPLIT usłudze Azure Synapse Analytics.
Transact-SQL konwencje składni
Składnia
STRING_SPLIT ( string , separator [ , enable_ordinal ] )
Arguments
string
Wyrażenie dowolnego typu znaku (na przykład nvarchar, varchar, nchar lub char).
separator
Jednoznakowe wyrażenie dowolnego typu znaku (na przykład nvarchar(1),varchar(1), nchar(1)lub char(1)), które jest używane jako separator dla podciągów połączonych.
enable_ordinal
Dotyczy: Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics (tylko bezserwerowa pula SQL) i SQL Server 2022 (16.x) i nowsze wersje
Wyrażenieint lub bit, które służy jako flaga umożliwiająca włączenie lub wyłączenie kolumny wyjściowejordinal. Wartość parametru 1 umożliwia kolumnę ordinal . Jeśli enable_ordinal zostanie pominięta, NULLlub ma wartość 0, kolumna ordinal jest wyłączona.
Typy zwracane
Jeśli kolumna ordinal wyjściowa nie jest włączona, zwraca tabelę z jedną kolumną, STRING_SPLIT której wiersze są podciągami. Nazwa kolumny to value. Zwraca wartość nvarchar , jeśli którykolwiek z argumentów wejściowych to nvarchar lub nchar. W przeciwnym razie zwraca wartość varchar. Długość typu zwracanego jest taka sama jak długość argumentu ciągu .
Jeśli argument enable_ordinal jest przekazywany wartość 1, zwracana jest druga kolumna o nazwie ordinal , która składa się z 1-opartych wartości indeksu pozycji każdego podciągu w ciągu wejściowym. Zwracany typ to bigint.
Uwagi
STRING_SPLIT wprowadza ciąg, który ma rozdzielone podciągi i wprowadza jeden znak do użycia jako ogranicznik lub separator. Opcjonalnie funkcja obsługuje trzeci argument z wartością 0 lub 1 , która wyłącza lub włącza odpowiednio lub włącza kolumnę wyjściową ordinal .
STRING_SPLIT zwraca jednokolumną lub dwukolumną tabelę w zależności od argumentu enable_ordinal .
Jeśli enable_ordinal to
NULL, pominięta lub ma wartość0,STRING_SPLITzwraca jednokolumny tabelę, której wiersze zawierają podciągy. Nazwa kolumny wyjściowej tovalue.Jeśli enable_ordinal ma wartość
1, funkcja zwraca tabelę dwukolumna, w tymordinalkolumnę składającą się z 1 wartości indeksu podciągów w oryginalnym ciągu wejściowym.
Argument enable_ordinal musi być stałą wartością, a nie kolumną ani zmienną. Musi to być również typ danych bitowych lub int z wartością 0 lub 1. W przeciwnym razie funkcja zgłasza błąd.
Wiersze wyjściowe mogą być w dowolnej kolejności. Kolejność nie jest gwarantowana, aby pasować do kolejności podciągów w ciągu wejściowym. Ostateczną kolejność sortowania można zastąpić przy użyciu ORDER BY klauzuli w instrukcji SELECT , na przykład ORDER BY value lub ORDER BY ordinal.
0x0000 (char(0)) jest niezdefiniowanym znakiem sortowania systemu Windows i nie można go uwzględnić w pliku STRING_SPLIT.
Puste podciągi o zerowej długości są obecne, gdy ciąg wejściowy zawiera co najmniej dwa kolejne wystąpienia znaku ogranicznika. Puste podciągniki są traktowane tak samo jak zwykłe podciągy. Możesz odfiltrować wszystkie wiersze zawierające pusty podciąg, używając klauzuli WHERE , na przykład WHERE value <> ''. Jeśli ciąg wejściowy to NULL, STRING_SPLIT funkcja table-valued zwraca pustą tabelę.
Na przykład poniższa SELECT instrukcja używa znaku spacji jako separatora:
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
W ramach przebiegu praktyki poprzednia SELECT tabela wyników zwróciła następującą tabelę wyników:
| value |
|---|
Lorem |
ipsum |
dolor |
sit |
amet. |
W poniższym przykładzie kolumna ordinal jest włączona przez przekazanie 1 opcjonalnego trzeciego argumentu:
SELECT * FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ', 1);
Ta instrukcja zwraca następnie następującą tabelę wyników:
| value | Porządkowych |
|---|---|
Lorem |
1 |
ipsum |
2 |
dolor |
3 |
sit |
4 |
amet. |
5 |
Przykłady
A. Podziel ciąg wartości rozdzielanych przecinkami
Przeanalizuj rozdzielaną przecinkami listę wartości i zwróć wszystkie niepuste tokeny:
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'
SELECT value
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> '';
STRING_SPLIT Zwraca pusty ciąg, jeśli nie ma nic między separatorem. Warunek RTRIM(value) <> '' usuwa puste tokeny.
B. Dzielenie ciągu wartości rozdzielanych przecinkami w kolumnie
Tabela product zawiera kolumnę z rozdzielaną przecinkami listą tagów pokazanych w poniższym przykładzie:
| IdentyfikatorProduktu | Name | Etykiety |
|---|---|---|
1 |
Full-Finger Gloves |
clothing,road,touring,bike |
2 |
LL Headset |
bike |
3 |
HL Mountain Frame |
bike,mountain |
Następujące zapytanie przekształca każdą listę tagów i łączy je z oryginalnym wierszem:
SELECT ProductId, Name, value
FROM Product
CROSS APPLY STRING_SPLIT(Tags, ',');
Oto zestaw wyników.
| IdentyfikatorProduktu | Name | Wartość |
|---|---|---|
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 |
Uwaga / Notatka
Kolejność danych wyjściowych może się różnić, ponieważ kolejność nie jest gwarantowana, aby dopasować kolejność podciągów w ciągu wejściowym.
C. Agregacja według wartości
Użytkownicy muszą utworzyć raport, który pokazuje liczbę produktów na każdy tag, uporządkowany według liczby produktów i aby filtrować tylko tagi z więcej niż dwoma produktami.
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. Wyszukiwanie według wartości tagu
Deweloperzy muszą tworzyć zapytania, które wyszukują artykuły według słów kluczowych. Mogą używać następujących zapytań:
Aby znaleźć produkty z pojedynczym tagiem (odzież):
SELECT ProductId, Name, Tags
FROM Product
WHERE 'clothing' IN (SELECT value FROM STRING_SPLIT(Tags, ','));
Znajdź produkty z dwoma określonymi tagami (odzież i droga):
SELECT ProductId, Name, Tags
FROM Product
WHERE EXISTS (SELECT *
FROM STRING_SPLIT(Tags, ',')
WHERE value IN ('clothing', 'road'));
E. Znajdowanie wierszy według listy wartości
Deweloperzy muszą utworzyć zapytanie, które znajduje artykuły według listy identyfikatorów. Mogą używać następującego zapytania:
SELECT ProductId, Name, Tags
FROM Product
JOIN STRING_SPLIT('1,2,3',',')
ON value = ProductId;
STRING_SPLIT Poprzednie użycie zastępuje wspólny antywzorzec. Taki antywzorzec może obejmować utworzenie dynamicznego ciągu SQL w warstwie aplikacji lub w języku Transact-SQL. Lub antywzorzec można osiągnąć za pomocą LIKE operatora . Zobacz następującą przykładowe SELECT instrukcje:
SELECT ProductId, Name, Tags
FROM Product
WHERE ',1,2,3,' LIKE '%,' + CAST(ProductId AS VARCHAR(20)) + ',%';
F. Znajdowanie wierszy według wartości porządkowych
Poniższa instrukcja znajduje wszystkie wiersze z parzystą wartością indeksu:
SELECT *
FROM STRING_SPLIT('Austin,Texas,Seattle,Washington,Denver,Colorado', ',', 1)
WHERE ordinal % 2 = 0;
Powyższa instrukcja zwraca następującą tabelę:
| value | Porządkowych |
|---|---|
| Teksas | 2 |
| Waszyngton | 4 |
| Kolorado | 6 |
G. Porządkowaj wiersze według wartości porządkowych
Poniższa instrukcja zwraca podzielone wartości podciągów ciągu wejściowego i ich wartości porządkowe uporządkowane według kolumny ordinal :
SELECT * FROM STRING_SPLIT('E-D-C-B-A', '-', 1) ORDER BY ordinal DESC;
Powyższa instrukcja zwraca następującą tabelę:
| value | Porządkowych |
|---|---|
| A | 5 |
| B | 4 |
| C | 3 |
| D | 2 |
| E | 1 |