Maison >base de données >tutoriel mysql >Comment extraire des données spécifiques d'une chaîne délimitée dans T-SQL ?

Comment extraire des données spécifiques d'une chaîne délimitée dans T-SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 06:50:13750parcourir

How to Extract Specific Data from a Delimited String in T-SQL?

Comment isoler des données spécifiques d'une chaîne délimitée dans T-SQL

Dans le monde de SQL, travailler avec des chaînes peut parfois présenter des défis , en particulier lorsque vous tentez d'extraire des informations spécifiques d'une chaîne plus longue contenant plusieurs points de données. Explorons un scénario dans lequel vous avez une table avec une colonne contenant une chaîne contenant plusieurs paires clé-valeur séparées par un délimiteur.

Définition du problème

Étant donné une table avec la structure suivante :

Col1 = '123'
Col2 = 'AAAAA'
Col3 = 'Clent ID = 4356hy|Client Name = B B BOB|Client Phone = 667-444-2626|Client Fax = 666-666-0151|Info = INF8888877 -MAC333330554/444400800'

Votre objectif est d'extraire uniquement la valeur "Nom du client", qui dans ce cas est "B B BOB", de la colonne "Col3". Les délimiteurs séparant les paires clé-valeur sont « | » caractères pipe, et les paires clé-valeur elles-mêmes sont délimitées par le signe égal (' = ') avec des espaces blancs de début et de fin.

Solution

Pour résoudre ce problème problème en T-SQL, vous pouvez utiliser les techniques de manipulation de chaînes suivantes :

  1. CHARINDEX et SUBSTRING : Utilisez la fonction CHARINDEX pour localiser la position de départ de la clé "Nom du client" et sous-chaînez la valeur correspondante à partir de la chaîne d'origine.
  2. STUFF : Utilisez la fonction STUFF pour insérez un délimiteur au début de la sous-chaîne pour la séparer du reste de la chaîne.
  3. LTRIM et RTRIM : Utilisez les fonctions LTRIM et RTRIM pour supprimer tous les espaces de début ou de fin de la valeur extraite.

Extrait de code

Pour vos données spécifiques , vous pouvez utiliser l'extrait de code suivant pour obtenir le résultat souhaité résultat :

Select col1, col2, LTRIM(RTRIM(SUBSTRING(
    STUFF(col3, CHARINDEX('|', col3,
    PATINDEX('%|Client Name =%', col3) + 14), 1000, ''),
    PATINDEX('%|Client Name =%', col3) + 14, 1000))) col3
from Table01

Remarque : Vous pouvez rencontrer une différence de performances mineure lors de l'utilisation de CHARINDEX par rapport à PATINDEX pour localiser la position de départ de la clé. Cependant, les deux approches donnent généralement des résultats similaires, car leurs efficacités sont comparables.

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!

Déclaration:
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