Je dois m'assurer qu'un champ donné n'a pas plus d'un espace (je ne suis pas préoccupé par tous les espaces blancs, juste l'espace) entre les caractères.
Alors
'single spaces only'
doit être transformé en
'single spaces only'
Le ci-dessous ne fonctionnera pas
select replace('single spaces only',' ',' ')
car cela entraînerait
'single spaces only'
Je préférerais vraiment m'en tenir à T-SQL natif plutôt qu'à une solution basée sur CLR.
Pensées?
sql-server
tsql
Christoph
la source
la source
Réponses:
Encore plus ordonné:
Production:
la source
Cela fonctionnerait:
la source
"release < now"
vous obtiendrez"release<><><<><>now"
,"release<<>now"
,"release< now"
, son même avec une paire de symboles, si vous avez un seul de la paire alors il va se déplacerSi vous savez qu'il n'y aura pas plus d'un certain nombre d'espaces dans une ligne, vous pouvez simplement imbriquer le remplacement:
4 remplacements devraient corriger jusqu'à 16 espaces consécutifs (16, puis 8, puis 4, puis 2, puis 1)
Si cela pouvait être beaucoup plus long, alors vous devriez faire quelque chose comme une fonction en ligne:
Alors fais juste
la source
Remplacer fonctionnera sur tous les espaces doubles, pas besoin de mettre plusieurs remplacements. C'est la solution basée sur les ensembles.
la source
Cela peut être fait récursivement via la fonction:
puis, par exemple:
Retour:
Ou la solution basée sur la méthode décrite par @ agdk26 ou @Neil Knight (mais plus sûre), les
deux exemples renvoient la sortie ci-dessus:
ou
Comment ça fonctionne:
Attention: le
caractère / chaîne utilisé pour remplacer les espaces ne doit pas exister au début ou à la fin de la chaîne et doit être autonome.
la source
C'est un peu de la force brute, mais cela fonctionnera
la source
Voici une fonction simple que j'ai créée pour nettoyer tous les espaces avant ou après, et plusieurs espaces dans une chaîne. Il gère gracieusement jusqu'à environ 108 espaces en un seul tronçon et autant de blocs qu'il y a dans la chaîne. Vous pouvez augmenter cela par des facteurs de 8 en ajoutant des lignes supplémentaires avec de plus grands morceaux d'espaces si vous en avez besoin. Il semble fonctionner rapidement et n'a causé aucun problème malgré son utilisation généralisée dans une grande application.
la source
J'ai trouvé ceci en cherchant une réponse:
La réponse complète (avec explication) a été extraite de: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
Au deuxième regard, semble être juste une version légèrement différente de la réponse sélectionnée.
la source
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.
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.
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.
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.
la source
C'est la solution via le remplacement multiple, qui fonctionne pour toutes les chaînes (n'a pas besoin de caractères spéciaux, qui ne font pas partie de la chaîne).
la source
J'utilise la solution FOR XML PATH pour remplacer plusieurs espaces en un seul espace
L'idée est de remplacer les espaces par des balises XML Puis diviser la chaîne XML en fragments de chaîne sans balises XML Enfin concaténer ces valeurs de chaîne en ajoutant des espaces simples entre deux
Voici comment la fonction UDF finale peut être appelée
la source
la source
J'utilise généralement cette approche:
la source
Juste ajouter une autre méthode-
Remplacement de plusieurs espaces par un seul espace SANS utiliser REPLACE dans SQL Server-
la source
Veuillez trouver ci-dessous le code
Cela a fonctionné pour moi .. J'espère que cela aide ...
la source
Vous pouvez essayer ceci:
la source
Essaye ça..
la source