Problém:
Chcete rozdělit řetězec na SQL Server.
Příklad 1:
Máte větu a chtěli byste ji rozdělit mezerou.
Řešení 1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Výsledek vypadá takto:
value |
---|
An |
příklad |
věta. |
Diskuse:
Funkce STRING_SPLIT(řetězec, oddělovač) v SQL Server rozdělí řetězec v prvním argumentu oddělovačem v druhém argumentu. Chcete-li rozdělit větu na slova, zadejte větu jako první argument funkce STRING_SPLIT()
funkce a ' ' jako druhý argument.
STRING_SPLIT()
výsledkem je sloupec s názvem hodnota. Chcete-li získat každou část řetězce v samostatném řádku, vyberte hodnotu z STRING_SPLIT(string, separator)
. Například,
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Řetězec samozřejmě můžete rozdělit pomocí jiného oddělovače, např. čárky. Sloupec můžete také přejmenovat stejně jako jakýkoli jiný sloupec.
Příklad 2:
V texts
tabulky, jsou tam nějaké věty.
věta |
---|
Toto je první věta. |
A tady je ten druhý. |
Chcete rozdělit věty podle mezery.
Řešení 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Výsledek vypadá takto:
value |
---|
Toto |
je |
the |
první |
věta. |
A |
tady |
the |
jiné |
jedna. |
Diskuse:
Stejně jako v předchozím příkladu rozděluje funkce STRING_SPLIT(text, oddělovač) řetězec zadaný jako první argument oddělovačem. Tentokrát se musíte postarat o pár vět; tyto věty jsou uloženy v texts
stůl. To je důvod, proč musíte použít CROSS APPLY; konkrétněji
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Použijte jej v FROM
doložka. Znamená to, že pravá strana (STRING_SPLIT(sentence, ' ')
) se použije na každý řádek tabulky na levé straně (texts
). Pravá strana proto může používat sloupce z levé tabulky (zde sloupec vět z texts
tabulka.) Zde je dotaz, který dostanete.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Příklad 3:
V texts
tabulka má dva sloupce:id
a sentence
.
id | věta |
---|---|
1 | Toto je první věta. |
2 | A tady je ten druhý. |
Chcete rozdělit věty podle mezery a také zobrazit ID vět.
Řešení 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Výsledek vypadá takto:
id | hodnota |
---|---|
1 | Toto |
1 | je |
1 | |
1 | první |
1 | věta. |
2 | A |
2 | tady |
2 | |
2 | jiné |
2 | jeden. |
Diskuse:
Tento příklad je velmi podobný, ale chcete také vidět id
sloupec. Chcete-li zobrazit tento sloupec, přidejte jej do SELECT
seznam a nezapomeňte uvést čárku. Ve výsledku uvidíte ID věty spolu s částmi vět. Například první věta je rozdělena na 5 částí a má ID 1
. Proto bude ID všech 5 dílů ve výsledné tabulce 1
. Další věta s ID 2
, je také rozdělena na 5 částí a každá z těchto částí bude zobrazena s id = 2
.