sql >> Databáze >  >> RDS >> Sqlserver

Jak rozdělit řetězec na SQL Server

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 .


  1. Syntaxe MySQL pro Join Update

  2. ORA-04091:tabulka [bla] mutuje, spouštěč/funkce ji nemusí vidět

  3. Výpis zastarání kurzoru

  4. jak změnit barvu pruhu v MPandroidCharts na základě nějaké individuální hodnoty uložené v sqlite?