Comment obtenir la nième chaîne de caractères dans tous les génériques mot ou une phrase avec un espace comme séparateur
Comment puis-je obtenir le n-ième mot dans une phrase ou un ensemble de chaînes avec délimiteur d'espace?
Désolé pour le changement de la condition.Merci.
Vous devez vous connecter pour publier un commentaire.
En utilisant
instr
.instr(help,' ')
retourne l'index de position de la première occurrence de la deuxième argument dans la première, inclusive de la chaîne que vous êtes à la recherche pour. c'est à dire la première occurrence de' '
dans la chaîne'hello my name is...'
plus l'espace.substr(help, 1, instr(help,' ') - 1)
prend alors la chaîne d'entrée à partir du premier caractère à l'indice indiqué dansinstr(...
. J'ai ensuite supprimer un, de sorte que l'espace n'est pas inclus..Pour la n-ième occurrence il suffit de changer un peu:
instr(help,' ',1,n)
est le nième apparition de' '
à partir du premier caractère. Ensuite, vous devez trouver la position de l'index de la prochaine indexinstr(help,' ',1,n + 1)
, enfin de travailler sur la différence entre eux afin de savoir jusqu'où aller dans votresubstr(...
. Comme vous êtes à la recherche pour le nième, quand n est 1 cela tombe en panne et vous avez à traiter avec elle, comme suit:Cela permettra également de se décomposer à n. Comme vous pouvez le voir cela devient ridicule de sorte que vous pouvez envisager d'utiliser
expressions régulières
regexp_count
.De l'essayer. Un exemple de l'obtention de la 4ème mot:
La requête interne est la conversion de l'espace délimité par la chaîne en un ensemble de lignes. La requête externe est saisissant le n-ième élément de l'ensemble.
Essayer quelque chose comme
De partager et de profiter.
Et voici la solution pour la version révisée de la question:
De partager et de profiter.
CRÉER PROC spGetCharactersInAStrings
(
@S VARCHAR(100) = '^1402 WSN NI^AMLAB^tev^e^^rtS htimS 0055518',
@Char VARCHAR(100) = '8'
)
COMME
-- exec spGetCharactersInAStrings '^1402 WSN NI^AMLAB^tev^e^^rtS htimS 0055518', '5'
COMMENCER
DECLARE @INT i = 1,
@c INT,
@INT pos = 0,
@NewStr VARCHAR(100),
@sql de type NVARCHAR(100),
@ParmDefinition de type nvarchar(500) = N'@retvalOUT int SORTIE'
FIN
Si vous utilisez MySQL et ne peut pas utiliser la fonction instr qui accepte les quatre paramètres ou regexp_substr, vous pouvez le faire de cette façon:
Résultat: "mon".
Remplacer "2" dans le code ci-dessus avec le nombre de mot que vous voulez.
Si vous utilisez SQL Server 2016+, alors vous pouvez prendre avantage de la STRING_SPLIT fonction. Il renvoie des lignes de valeurs de chaîne et si vous visez pour obtenir la n-ième valeur, vous pouvez utiliser la fonction Row_Number() de la fenêtre de fonction.
Ici, il y a un petit truc que vous ne voulez pas vraiment à l'ordre par quelque chose de sorte que vous avez à "tromper" le la fonction row_number et permettre à sa valeur dans l'ordre naturel, qui est le STRING_SPLIT() va cracher.
Ci-dessous est un extrait de code si vous voulez trouver le troisième mot de la chaîne de
Vous pouvez également faire une fonction scalaire pour récupérer les valeurs.