Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment fractionner une chaîne dans SQL Server

Problème :

Vous souhaitez fractionner une chaîne dans SQL Server.

Exemple 1 :

Vous avez une phrase et vous aimeriez la diviser par le caractère espace.

Solution 1 :

SELECT value
FROM STRING_SPLIT('An example sentence.', ' ');

Le résultat ressemble à ceci :

valeur
Un
exemple
phrase.

Discussion :

La fonction STRING_SPLIT(string, separator) dans SQL Server divise la chaîne du premier argument par le séparateur du deuxième argument. Pour diviser une phrase en mots, spécifiez la phrase comme premier argument du STRING_SPLIT() fonction et ' ' comme second argument.

STRING_SPLIT() résultats dans une colonne nommée valeur. Pour obtenir chaque partie de la chaîne dans une ligne distincte, sélectionnez la valeur dans STRING_SPLIT(string, separator) . Par exemple,

SELECT value
FROM STRING_SPLIT('An example sentence.', ' ');

Bien sûr, vous pouvez diviser une chaîne en utilisant un autre séparateur, par exemple la virgule. Vous pouvez également renommer la colonne comme n'importe quelle autre colonne.

Exemple 2 :

Dans les texts table, il y a quelques phrases.

phrase
Ceci est la première phrase.
Et voici l'autre.

Vous voulez diviser les phrases par le caractère espace.

Solution 2 :

SELECT value
FROM texts
CROSS APPLY STRING_SPLIT(sentence, ' ');

Le résultat ressemble à ceci :

valeur
Ceci
est
le
premier
phrase.
Et
voici
le
autre
un.

Discussion :

Tout comme dans l'exemple précédent, la fonction STRING_SPLIT(text, separator) divise la chaîne donnée en premier argument par le séparateur. Cette fois, vous avez quelques phrases à régler; ces phrases sont stockées dans les texts table. C'est pourquoi vous devez utiliser CROSS APPLY; plus précisément,

texts CROSS APPLY STRING_SPLIT(sentence, ' ')

Utilisez-le dans le FROM clause. Cela signifie que le côté droit (STRING_SPLIT(sentence, ' ') ) est appliqué à chaque ligne du tableau de gauche (texts ). C'est pourquoi le côté droit peut utiliser les colonnes du tableau de gauche (ici, la colonne phrase des texts table.) Voici la requête que vous obtenez.

SELECT value
FROM texts
CROSS APPLY STRING_SPLIT(sentence, ' ');

Exemple 3 :

Dans les texts table, il y a deux colonnes :id et sentence .

identifiant phrase
1 Ceci est la première phrase.
2 Et voici l'autre.

Vous souhaitez diviser les phrases par le caractère espace et également afficher les ID des phrases.

Solution 3 :

SELECT
  id,
  value
FROM texts
CROSS APPLY STRING_SPLIT(sentence, ' ');

Le résultat ressemble à ceci :

identifiant valeur
1 Ceci
1 est
1 le
1 premier
1 phrase.
2 Et
2 voici
2 le
2 autre
2 un.

Discussion :

Cet exemple est très similaire, mais vous voulez également voir le id colonne. Pour voir cette colonne, ajoutez-la simplement au SELECT liste et n'oubliez pas d'inclure la virgule. Vous verrez l'ID de la phrase ainsi que les parties des phrases dans le résultat. Par exemple, la première phrase est divisée en 5 parties et a l'ID 1 . Par conséquent, l'ID pour les 5 parties dans le tableau de résultats sera 1 . La phrase suivante, avec l'ID 2 , est également divisé en 5 parties, et chacune de ces parties sera affichée avec id = 2 .