8
votes

Comment scinder la chaîne à l'aide de Delimiter Char avec T-SQL?

J'ai cette longue chaîne dans l'une des colonnes de la table. Je veux avoir seulement des informations spécifiques: - Ma structure de table: - xxx

mon instruction SELECT est la suivante: - xxx

mais dans le col3, j'ai juste besoin de la valeur du nom du client " BB BOB '.

dans col3 -

  • Le délimiteur de colonne est '|' Pipe Char (par exemple, «ID client = 4356HYHY»)

  • La valeur de la valeur de la clé de la clé est '=' égale à la signature avec un espace blanc (premier et arrière).

    aide s'il vous plaît.


2 commentaires

Préparez-vous à beaucoup de commentaires sur la manière dont la conception est terrible :)


Pour ramasser @ Jnk's Ball: C'est un design terrible! Mais vous pouvez toujours l'enregistrer si vous modifiez la structure de la table pour inclure une clé étrangère à une table client qui contient toutes les données ...


4 Réponses :


3
votes

Vous avez besoin d'une fonction fractionnée: xxx

avec votre fonction fractionnée, vous utiliseriez ensuite une application croisée pour obtenir les données: xxx


1 commentaires

Cette fonction ne donne pas de résultats cohérents. Voir Stackoverflow.com/q/12480321 pour des problèmes, y compris un violon qui démontre le problème.



0
votes

Vous avez simplement besoin de faire un substrateur sur la chaîne de Col3 .... xxx

et oui, c'est une mauvaise conception de DB pour les raisons indiquées dans le numéro d'origine


0 commentaires

0
votes

C'est terrible, mais vous pouvez essayer d'utiliser

select
SUBSTRING(Table1.Col1,0,PATINDEX('%|%=',Table1.Col1)) as myString
from
Table1


0 commentaires

9
votes

Pour vos données spécifiques, vous pouvez utiliser

CHARINDEX:

 SQL Server Execution Times (1):
   CPU time = 5656 ms,  elapsed time = 6418 ms.
 SQL Server Execution Times (2):
   CPU time = 5813 ms,  elapsed time = 6114 ms.
 SQL Server Execution Times (3):
   CPU time = 5672 ms,  elapsed time = 6108 ms.

PATINDEX:

 SQL Server Execution Times (1):
   CPU time = 5906 ms,  elapsed time = 6296 ms.
 SQL Server Execution Times (2):
   CPU time = 5860 ms,  elapsed time = 6404 ms.
 SQL Server Execution Times (3):
   CPU time = 6109 ms,  elapsed time = 6301 ms.


1 commentaires

N'est pas Patindex ('% | nom de client =%', col3) identique que charindex ('| nom de client =', col3) et n'est pas ce dernier censé être plus rapide que le premier?