Méthode n ° 1
La première méthode consiste à remplacer les espaces supplémentaires entre les mots par une combinaison de symboles inhabituelle comme marqueur temporaire. Ensuite, vous pouvez remplacer les symboles de marqueurs temporaires en utilisant la fonction de remplacement plutôt qu'une boucle.
Voici un exemple de code qui remplace le texte dans une variable String.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(@testString, ' ', '*^'), '^*', ''), '*^', ' ');
Test de temps d'exécution n ° 1: en dix exécutions de cette méthode de remplacement, le temps d'attente moyen des réponses du serveur était de 1,7 millisecondes et le temps d'exécution total était de 4,6 millisecondes. Test de temps d'exécution n ° 2: le temps d'attente moyen des réponses du serveur était de 1,7 millisecondes et le temps d'exécution total était de 3,7 millisecondes.
Méthode n ° 2
La deuxième méthode n'est pas aussi élégante que la première, mais elle fait également le travail. Cette méthode fonctionne en imbriquant quatre instructions de remplacement (ou éventuellement plus) qui remplacent deux espaces vides par un espace vide.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(REPLACE(@testString,' ',' '),' ',' '),' ',' '),' ',' ')
Test de temps d'exécution n ° 1: en dix exécutions de cette méthode de remplacement, le temps d'attente moyen des réponses du serveur était de 1,9 millisecondes et le temps d'exécution total était de 3,8 millisecondes. Test de temps d'exécution n ° 2: le temps d'attente moyen des réponses du serveur était de 1,8 millisecondes et le temps d'exécution total était de 4,8 millisecondes.
Méthode n ° 3
La troisième méthode pour remplacer les espaces supplémentaires entre les mots consiste à utiliser une simple boucle. Vous pouvez vérifier les espaces supplémentaires dans une boucle while, puis utiliser la fonction de remplacement pour réduire les espaces supplémentaires à chaque itération de la boucle.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
WHILE CHARINDEX(' ',@testString) > 0
SET @testString = REPLACE(@testString, ' ', ' ')
SELECT @testString
Test du temps d'exécution n ° 1: en dix exécutions de cette méthode de remplacement, le temps d'attente moyen des réponses du serveur était de 1,8 millisecondes et le temps d'exécution total était de 3,4 millisecondes. Test de temps d'exécution n ° 2: le temps d'attente moyen des réponses du serveur était de 1,9 millisecondes et le temps d'exécution total était de 2,8 millisecondes.