Maison > base de données > tutoriel mysql > Comment puis-je diviser des chaînes délimitées dans SQL Server sans fonction de division native ?

Comment puis-je diviser des chaînes délimitées dans SQL Server sans fonction de division native ?

Linda Hamilton
Libérer: 2025-01-25 12:57:09
original
537 Les gens l'ont consulté

How Can I Split Delimited Strings in SQL Server Without a Native Split Function?

Chaîne de délimiteur divisée dans SQL Server

SQL Server ne dispose pas de fonctions natives de fractionnement de chaînes, ce qui crée des problèmes lors de la gestion des chaînes délimitées. Cependant, nous pouvons résoudre intelligemment ce problème en utilisant la fonction PARSENAME.

Pour diviser une chaîne comme « Hello John Smith » par un délimiteur (par exemple un espace) et accéder à l'élément à un index spécifique, suivez ces étapes :

  1. Remplacer les séparateurs par des caractères différents : Utilisez la fonction REPLACE() pour remplacer les espaces par des caractères uniques, tels que des points. Par exemple :
<code class="language-sql">REPLACE('Hello John Smith', ' ', '.')</code>
Copier après la connexion
  1. Diviser une chaîne à l'aide de PARSENAME : La fonction PARSENAME divise une chaîne modifiée en fonction du nouveau délimiteur. Son deuxième paramètre détermine quel segment récupérer. Pour accéder au Projet 1 (John), utilisez :
<code class="language-sql">SELECT PARSENAME(REPLACE('Hello John Smith', ' ', '.'), 2)</code>
Copier après la connexion

Cette méthode fonctionne en créant une table temporaire avec une seule colonne, où chaque valeur représente un fragment de la chaîne d'origine. Cependant, il est important de noter que cette méthode peut ne pas fonctionner si la chaîne d'origine contient déjà un point.

Solutions tierces

Vous pouvez également envisager d'utiliser une fonction définie par l'utilisateur (UDF) spécifiquement pour le fractionnement de chaînes. Cette approche offre une plus grande flexibilité et fiabilité.

Ce qui suit est un exemple d'UDF qui divise une chaîne à l'aide d'un délimiteur spécifié :

<code class="language-sql">CREATE FUNCTION Split(@String VARCHAR(MAX), @Delimiter VARCHAR(1))
RETURNS TABLE
AS
RETURN (SELECT Item FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY r.rn) AS rn,
           LEFT(s, CHARINDEX(@Delimiter, s) - 1) AS Item
    FROM (SELECT @String AS s, 1 AS rn
          UNION ALL
          SELECT SUBSTRING(@String, CHARINDEX(@Delimiter, @String) + 1, LEN(@String)), rn + 1
          FROM Split(@String, @Delimiter)) AS r
    WHERE s IS NOT NULL
) AS t)</code>
Copier après la connexion

Exemple d'utilisation :

Pour diviser la chaîne « Hello John Smith » à l'aide du délimiteur « », exécutez la requête suivante :

<code class="language-sql">SELECT * FROM Split('Hello John Smith', ' ')</code>
Copier après la connexion

Cette requête renverra une table avec deux colonnes : rn (l'index de l'élément) et Item (la valeur de l'élément).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal