Je voudrais diviser en dessous de la chaîne: sortie souhaitée: p> édité: p> FAR que j'ai essayé p> Je n'ai pas eu de moyen de trouver pour le reste de colonnes p> Résultats actuels: P> String Key step substep
?Reqid=325235&step=5&substep=13 325235 0 0
6 Réponses :
SQL Server vraiment em> manque de fonctions de regex, et ce type de manipulation de chaîne serait probablement mieux géré le côté de l'application. qui étant dit, supposant que les touches sont toujours dans la même séquence, Vous pouvez faire: p> Démo sur db violon strong>: p>
En supposant un format fixe pour votre chaîne (URL), alors ce qui suit extraire les informations demandées: résultat: p> ReqID Step SubStep
325235 5 13
Ceci peut aider
select @string String,
substring(@string, len('?reqID=') + 1, (CHARINDEX('&step=', @string) - (len('?reqID=') + 1))) [Key],
SUBSTRING(@string, CHARINDEX('&step=', @string) + len('&step='), CHARINDEX('&substep', @string) - CHARINDEX('&step=', @string) - len('&step=')) Step,
SUBSTRING(@string, CHARINDEX('&substep=', @string) + len('&substep='), len(@string) - charindex('&substep=', @string)) Step
Si vous utilisez SQL Server 2016 ou ultérieur, vous pouvez utiliser la fonction string_split code> pour diviser la chaîne par un caractère. Voir la requête complète ci-dessous.
string_split () code> ne garantit pas de retourner dans l'ordre de tri attendu ...
@Shnugo vous avez raison. J'ai changé ma requête pour rendre la commande cohérente.
Eh bien, cela pourrait fonctionner ... mais - comme string_split code> nécessite v2016 +, il y a la bien meilleure approche JSON (voir ma réponse).
Ceci est une option assez simple qui devrait être facile à comprendre:
SQL-Server n'est pas bien adapté à cette tâche, mais il existe un très bon travail autour de JSON (version 2016+) ou XML (Formulaire de démarrage V2005):
<x Reqid="325235" step="5" substep="13" />