Comment extraire cette sous-chaîne spécifique dans SQL Server?
J'ai une chaîne avec un modèle spécifique:
23;chair,red [$3]
c'est à dire, un numéro suivi d'un point-virgule, puis un nom suivi d'un crochet gauche.
En supposant que le point-virgule ;
existe toujours et le crochet gauche [
existe toujours dans la chaîne, comment puis-je extraire le texte entre (et non compris) le ;
et la [
dans une requête SQL Server? Merci.
source d'informationauteur RJIGO
Vous devez vous connecter pour publier un commentaire.
Combiner les
SUBSTRING()
LEFT()
etCHARINDEX()
fonctions.Cela suppose que votre champ de longueur ne dépassera jamais 100, mais vous pouvez le rendre plus intelligent de compte pour que, si nécessaire, en utilisant le
LEN()
fonction. Je n'ai pas pris la peine car il y a assez de se passe là-bas déjà, et je n'ai pas une instance de test, donc je suis juste eyeballing mes parenthèses, etc.En supposant qu'ils existent toujours et ne sont pas une partie de vos données, cela va fonctionner:
Une alternative à la réponse fournie par @Marc
Cela permet de s'assurer de la délimiteurs existent, et résout un problème avec le actuellement accepté de répondre là où la GAUCHE de la dernière travaille avec la position du dernier délimiteur dans la chaîne d'origine, plutôt que la version révisée de la sous-chaîne.
Si vous avez besoin de partager quelque chose en 3 morceaux, comme une adresse e-mail et que vous ne connaissez pas la longueur de la partie du milieu, essayez ceci (j'ai juste couru ce sur sqlserver 2012 donc je sais que ça fonctionne):
Espère que cette aide.
select substring(your_field, CHARINDEX(';',your_field)+1
,CHARINDEX('[',your_field)-CHARINDEX(';',your_field)-1)
de your_table
Ne pouvez pas obtenir les autres de travailler. Je crois que vous voulez juste ce qu'il est entre le ';' et '[' dans tous les cas, indépendamment de la longueur de la chaîne entre les deux est. Après en précisant le champ de la fonction substring, le deuxième argument est le lieu de départ de ce que vous voulez extraire. C'est là où le ';' est + 1 (quatrième position - c), parce que vous ne voulez pas inclure les ';'. Le prochain argument prend l'emplacement de la '[' (poste 14) et soustrait l'emplacement de l'endroit après le ';' (quatrième position - c'est pourquoi j'ai maintenant soustraire 1 de la requête). Cela dit essentiellement substring(de terrain,de l'emplacement, je veux sous-chaîne pour commencer, combien de temps je veux sous-chaîne). J'ai utilisé cette même fonction, dans les autres cas. Si certains champs n'ont pas de ';' et '[', vous aurez envie de filtre dans la clause "where", mais c'est un peu différente de la question. Si votre ';' a dire... ';;;', vous pouvez utiliser 3 au lieu de 1 dans l'exemple. Espérons que cette aide!